2016-09-04 56 views
1
void main() 
{ 
    ..... 
    pthread_mutex_init(&lock) 
    pthread_create(fun,...) 
    pthread_create(fun,...) 
    pthread_create(fun,...) 
} 

void fun() 
{ 
    pthread_mutex_lock(&lock) 
    ........... 
    pthread_mutex_unlock(&lock) 
} 

在上面的代码中,我创建了3个线程调用相同的函数fun。我可以告诉你,有趣的执行需要比创建线程更长的时间。所以最初有3个线程。但第一个线程在锁定后已经在执行。现在第二和第三个线程正在等待。我的问题是一旦锁定被释放,哪个线程将被安排。它是第二个线程,然后是第三个或取决于调度程序。调度程序是否为等待的线程维护任何类型的队列并以FIFO方式进行调度?在第一个线程退出后哪个线程被调度?

回答

0

不,它不像FIFO。随机一个线程将被唤醒。

+0

谢谢。在第一个线程退出后,是否立即调度第二个线程? – Harsha

+0

你必须自己实现一个公平的互斥锁。它可以通过使用标准互斥来完成。另请参阅:http://stackoverflow.com/questions/5385777/implementing-a-fifo-mutex-in-pthreads – redneb

相关问题