futex priority based wakeup

Benedict, Michael MBenedict at twacs.com
Sat Sep 8 03:24:54 EST 2007


Thank you for the help!

Same result with fflush :(.

Are you maybe wrong because you have tested 2.5 and it doesn't work?  Or
just uncertain?

The only thing I have read that mentions glibc version is the work Ingo
did against 2.4 glibc and in the 2.6.16-mm1 patches...
http://people.redhat.com/mingo/PI-futex-patches/.  I can not detrmine
how this relates to the 2.6.22 priority based futex wakeup commit.

I am currently fighting crosstool-0.43 to build a newer glibc and I will
share results if/when I get that to work.
	-Michael

Ilya Lipovsky wrote:
> ...Or maybe I am wrong :). Could you put fflush(stdout) after
> each printf,
> just to be completely certain that it misbehaves?
> 
> -----Original Message-----
> From: linuxppc-embedded-bounces+lipovsky=cs.bu.edu at ozlabs.org
> [mailto:linuxppc-embedded-bounces+lipovsky=cs.bu.edu at ozlabs.or g] On
> Behalf Of Ilya Lipovsky Sent: Friday, September 07, 2007 12:41 PM
> To: 'Benedict, Michael'; linuxppc-embedded at ozlabs.org
> Subject: RE: futex priority based wakeup
> 
> Looks like it is a libc issue. Apparently, GNU libc supports priority
> futexes only in version 2.5 and higher.
> 
> -----Original Message-----
> From: linuxppc-embedded-bounces+lipovsky=cs.bu.edu at ozlabs.org
> [mailto:linuxppc-embedded-bounces+lipovsky=cs.bu.edu at ozlabs.or g] On
> Behalf Of Benedict, Michael Sent: Friday, September 07, 2007 11:02 AM
> To: linuxppc-embedded at ozlabs.org
> Subject: futex priority based wakeup
> 
> I recently upgraded to 2.6.22 to get the priority based futex wakeup
> behavior.  However, when I run a simple program (see below), based on
> either a pthread_mutex_t or a sem_t, it seems that threads
> are woken up
> in FIFO order.  I am using glibc 2.3.6 with NPTL and TLS, based off
> crossdev-0.43.  Could someone help me get priority-based
> wakeup or point
> me to a better place to get this question answered? 	Thank you,
> 		Michael
> 
> Code:
> 
> pthread_mutex_t mymutex = PTHREAD_MUTEX_INITIALIZER;
> 
> void *important(void *ign)
> {
>         sleep(1);
>         printf("important waiting for mutex\n");
>         if(pthread_mutex_lock(&mymutex)) {
>                 perror("sem_wait");
>                 exit(1);
>         } else {
>                 printf("important got mutex!\n");
>                 pthread_mutex_unlock(&mymutex);
>         }
> 
>         return NULL;
> }
> 
> 
> void *unimportant(void *ign)
> {
>         printf("unimportant waiting for mutex\n");
>         if(pthread_mutex_lock(&mymutex)) {
>                 perror("sem_wait");
>                 exit(1);
>         } else {
>                 printf("unimportant got mutex!\n");
>                 pthread_mutex_unlock(&mymutex);
>         }
> 
>         return NULL;
> }
> 
> int main()
> {
>         struct sched_param p;
>         pthread_attr_t attr;
>         pthread_t i, u;
> 
>         pthread_mutex_lock(&mymutex);
> 
>         p.__sched_priority = sched_get_priority_min(SCHED_FIFO);
>         if(-1 == p.__sched_priority) {
>                 perror("sched_get_priority_min");
>                 return 1;
>         }
>         pthread_attr_init(&attr);
>         pthread_attr_setschedpolicy(&attr, SCHED_FIFO);
>         pthread_attr_setschedparam(&attr, &p);
>         pthread_create(&u, &attr, unimportant, NULL);
> 
>         p.__sched_priority = sched_get_priority_max(SCHED_FIFO);
>         pthread_attr_setschedparam(&attr, &p);
>         pthread_create(&i, &attr, important, NULL);
> 
>         sleep(5);
>         printf("main unlocking mutex\n");
>         pthread_mutex_unlock(&mymutex);
> 
>         pthread_join(u, NULL);
>         pthread_join(i, NULL);
> 
>         return 0;
> }
> 
> Which produces:
> unimportant waiting for mutex
> important waiting for mutex
> main unlocking mutex
> unimportant got mutex!
> important got mutex!
> 
> _______________________________________________
> Linuxppc-embedded mailing list
> Linuxppc-embedded at ozlabs.org
> https://ozlabs.org/mailman/listinfo/linuxppc-embedded
> 
> _______________________________________________
> Linuxppc-embedded mailing list
> Linuxppc-embedded at ozlabs.org
> https://ozlabs.org/mailman/listinfo/linuxppc-embedded




More information about the Linuxppc-embedded mailing list