Skip to contentSkip to conversation

prio-wake: allow for optional locking prior to broadcast

PATCH In review Darren Hart 2 participants 2 messages Aug 24, 2009 – Aug 25, 2009

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 prio-wake: allow for optional locking prior to broadcast

prio-wake: allow for optional locking prior to broadcast

Allow the user to decide if the mutex should be held prior to calling pthread_cond_broadcast(). Default remains the same. Tested with and without the argument as well as with both 0 and 1 passed to the argument. Values other than 0 and 1 will result in locking the mutex.

---
 func/prio-wake/prio-wake.c |   18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)
func/prio-wake/prio-wake.c +14 -4
Index: realtime/func/prio-wake/prio-wake.c
===================================================================
@@ -56,6 +56,7 @@
 #include <librttest.h>
 volatile int running_threads = 0;
 static int rt_threads = 0;
+static int locked_broadcast = 1;
 static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
 static pthread_mutex_t mutex;
 static volatile nsec_t beginrun;
@@ -67,6 +68,8 @@ void usage(void)
         rt_help();
         printf("prio-wake specific options:\n");
         printf("  -n#           #: number of worker threads\n");
+        printf("  -l#           1:lock the mutex before broadcast, 0:don't\n");
+	printf("                defaults to 1\n");
 }
 
 int parse_args(int c, char *v)
@@ -80,6 +83,9 @@ int parse_args(int c, char *v)
                 case 'n':
                         rt_threads = atoi(v);
                         break;
+                case 'l':
+                        locked_broadcast = atoi(v);
+                        break;
                 default:
                         handled = 0;
                         break;
@@ -106,9 +112,11 @@ void *master_thread(void* arg)
 
 	printf("%08lld us: Master thread about to wake the workers\n", start/NS_PER_US);
 	/* start the children threads */
-	rc = pthread_mutex_lock(&mutex);
+	if (locked_broadcast)
+		rc = pthread_mutex_lock(&mutex);
 	rc = pthread_cond_broadcast(&cond);
-	rc = pthread_mutex_unlock(&mutex);
+	if (locked_broadcast)
+		rc = pthread_mutex_unlock(&mutex);
 
 	while (running_threads > 0)
 		sleep(1);
@@ -161,7 +169,7 @@ int main(int argc, char* argv[])
 	int i;
 	setup();
 
-        rt_init("hn:", parse_args, argc, argv);
+        rt_init("hn:l:", parse_args, argc, argv);
 
 	if (rt_threads == 0) {
 		numcpus = sysconf(_SC_NPROCESSORS_ONLN);
@@ -172,7 +180,9 @@ int main(int argc, char* argv[])
 	printf("\n-----------------------\n");
 	printf("Priority Ordered Wakeup\n");
 	printf("-----------------------\n");
-	printf("Worker Threads: %d\n\n", rt_threads);
+	printf("Worker Threads: %d\n", rt_threads);
+	printf("Calling pthread_cond_broadcast() with mutex: %s\n\n",
+	       locked_broadcast ? "LOCKED" : "UNLOCKED");
 
 	pri_boost = 3;
 
Signature · 13 lines
Darren Hart
IBM Linux Technology Center
Real-Time Linux Team

------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list
#1 lore raw
Quoted 9 lines · Darren Hart

prio-wake: allow for optional locking prior to broadcast

Allow the user to decide if the mutex should be held prior to calling pthread_cond_broadcast(). Default remains the same. Tested with and without the argument as well as with both 0 and 1 passed to the argument. Values other than 0 and 1 will result in locking the mutex.

Thanks.

Regards--
Subrata

Quoted 63 lines
---
 func/prio-wake/prio-wake.c |   18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

Index: realtime/func/prio-wake/prio-wake.c
===================================================================

func/prio-wake/prio-wake.c +11 -3
@@ -56,6 +56,7 @@
 #include <librttest.h>
 volatile int running_threads = 0;
 static int rt_threads = 0;
+static int locked_broadcast = 1;
 static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
 static pthread_mutex_t mutex;
 static volatile nsec_t beginrun;
@@ -67,6 +68,8 @@ void usage(void)
         rt_help();
         printf("prio-wake specific options:\n");
         printf("  -n#           #: number of worker threads\n");
+        printf("  -l#           1:lock the mutex before broadcast, 0:don't\n");
+	printf("                defaults to 1\n");
 }
 
 int parse_args(int c, char *v)
@@ -80,6 +83,9 @@ int parse_args(int c, char *v)
                 case 'n':
                         rt_threads = atoi(v);
                         break;
+                case 'l':
+                        locked_broadcast = atoi(v);
+                        break;
                 default:
                         handled = 0;
                         break;
@@ -106,9 +112,11 @@ void *master_thread(void* arg)
 
 	printf("%08lld us: Master thread about to wake the workers\n", start/NS_PER_US);
 	/* start the children threads */
-	rc = pthread_mutex_lock(&mutex);
+	if (locked_broadcast)
+		rc = pthread_mutex_lock(&mutex);
 	rc = pthread_cond_broadcast(&cond);
-	rc = pthread_mutex_unlock(&mutex);
+	if (locked_broadcast)
+		rc = pthread_mutex_unlock(&mutex);
 
 	while (running_threads > 0)
 		sleep(1);
@@ -161,7 +169,7 @@ int main(int argc, char* argv[])
 	int i;
 	setup();
 
-        rt_init("hn:", parse_args, argc, argv);
+        rt_init("hn:l:", parse_args, argc, argv);
 
 	if (rt_threads == 0) {
 		numcpus = sysconf(_SC_NPROCESSORS_ONLN);

func/prio-wake/prio-wake.c int main(int argc, char* argv[]) · line 188

Quoted 10 lines
func/prio-wake/prio-wake.c +3 -1
@@ -172,7 +180,9 @@ int main(int argc, char* argv[])
 	printf("\n-----------------------\n");
 	printf("Priority Ordered Wakeup\n");
 	printf("-----------------------\n");
-	printf("Worker Threads: %d\n\n", rt_threads);
+	printf("Worker Threads: %d\n", rt_threads);
+	printf("Calling pthread_cond_broadcast() with mutex: %s\n\n",
+	       locked_broadcast ? "LOCKED" : "UNLOCKED");
 
 	pri_boost = 3;
 

------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list