当前位置: 技术问答>linux和unix
求助,GCC中关于互斥锁的问题
来源: 互联网 发布时间:2016-08-14
本文导语: 如果在加锁与解锁中间有SLEEP,则第一个获取锁的线程将会一直占有锁,直到其退出,其它线程才会进入该锁。 pthread_mutex_t g_lock; void LockFun() { pthread_mutex_lock(&g_lock); usleep(10000); pthread_mutex_unlock(&g_l...
如果在加锁与解锁中间有SLEEP,则第一个获取锁的线程将会一直占有锁,直到其退出,其它线程才会进入该锁。
pthread_mutex_t g_lock;
void LockFun()
{
pthread_mutex_lock(&g_lock);
usleep(10000);
pthread_mutex_unlock(&g_lock);
}
有2个线程thread1, thread2调用该函数,如
threadfun()
{
while(1)
{
LockFun();
}
}
main()
{
pthread_mutex_init(&g_lock, 0);
thread1-->create();
thread2-->create();
while(1)
{
usleep(10000);
}
pthread_mutex_destroy(&g_lock);
}
运行的结果是线程1不断的调用函数,而线程2就挂在pthread_mutex_lock(&g_lock)上也不返回,直到线程1中止,线程2才进入到函数里,这是为什么啊,能不能让它像WINDOWS下的锁一样,有一个排队的优先级。
pthread_mutex_t g_lock;
void LockFun()
{
pthread_mutex_lock(&g_lock);
usleep(10000);
pthread_mutex_unlock(&g_lock);
}
有2个线程thread1, thread2调用该函数,如
threadfun()
{
while(1)
{
LockFun();
}
}
main()
{
pthread_mutex_init(&g_lock, 0);
thread1-->create();
thread2-->create();
while(1)
{
usleep(10000);
}
pthread_mutex_destroy(&g_lock);
}
运行的结果是线程1不断的调用函数,而线程2就挂在pthread_mutex_lock(&g_lock)上也不返回,直到线程1中止,线程2才进入到函数里,这是为什么啊,能不能让它像WINDOWS下的锁一样,有一个排队的优先级。
|
sleep不一定是好方法,看看我的帖子中说的
http://topic.csdn.net/u/20100317/10/ffb0994d-ea2d-49b4-94c6-ecf8aef1ca31.html
说的很清楚了
http://topic.csdn.net/u/20100317/10/ffb0994d-ea2d-49b4-94c6-ecf8aef1ca31.html
说的很清楚了
|
。。。
我现在虚拟机正在重装,无法验证你的代码。
但是,应该是这种情况:
void LockFun()
{
pthread_mutex_lock(&g_lock);
usleep(10000);
pthread_mutex_unlock(&g_lock);
}
中,usleep完之后,unlock了,线程而就可以进去了。
sleep()的过程中,该线程被挂起了,暂时失去了CPU,但是线程2此时就算得到CPU,他也没法继续运行,
因为没有得到锁,只有得到锁的情况下,才会继续往下走。
我现在虚拟机正在重装,无法验证你的代码。
但是,应该是这种情况:
void LockFun()
{
pthread_mutex_lock(&g_lock);
usleep(10000);
pthread_mutex_unlock(&g_lock);
}
中,usleep完之后,unlock了,线程而就可以进去了。
sleep()的过程中,该线程被挂起了,暂时失去了CPU,但是线程2此时就算得到CPU,他也没法继续运行,
因为没有得到锁,只有得到锁的情况下,才会继续往下走。
|
up