prio-wake: allow for optional locking prior to broadcast
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
@@ -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
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.Signed-off-by Darren Hart <[email protected]>
Thanks.
Regards--
Subrata
Quoted 63 lines
Acked-by Vernon Mauery <[email protected]>Acked-by Gowrishankar <[email protected]>--- 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