From: "Ilya Lipovsky" <lipovsky@cs.bu.edu>
To: "'Benedict, Michael'" <MBenedict@twacs.com>,
<linuxppc-embedded@ozlabs.org>
Subject: RE: futex priority based wakeup
Date: Fri, 7 Sep 2007 12:41:12 -0400 [thread overview]
Message-ID: <000901c7f16d$fbbc9d40$3a0d10ac@Radstone.Local> (raw)
In-Reply-To: <BAF8B1E0BB28024A90895E746A3B610D1C2BCD@twx-exch01.twacs.local>
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@ozlabs.org
[mailto:linuxppc-embedded-bounces+lipovsky=cs.bu.edu@ozlabs.org] On Behalf
Of Benedict, Michael
Sent: Friday, September 07, 2007 11:02 AM
To: linuxppc-embedded@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@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-embedded
next prev parent reply other threads:[~2007-09-07 16:52 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-09-07 15:02 futex priority based wakeup Benedict, Michael
2007-09-07 16:41 ` Ilya Lipovsky [this message]
2007-09-07 17:16 ` Ilya Lipovsky
2007-09-07 17:24 ` Benedict, Michael
2007-09-07 17:45 ` Ilya Lipovsky
2007-09-07 17:54 ` Benedict, Michael
2007-09-10 18:51 ` Benedict, Michael
2007-09-10 21:41 ` Benedict, Michael
2007-09-11 22:59 ` Ilya Lipovsky
2007-09-12 0:14 ` Nguyen Nguyen
2007-09-12 1:09 ` Ilya Lipovsky
2007-09-12 14:56 ` Benedict, Michael
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='000901c7f16d$fbbc9d40$3a0d10ac@Radstone.Local' \
--to=lipovsky@cs.bu.edu \
--cc=MBenedict@twacs.com \
--cc=linuxppc-embedded@ozlabs.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.