首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

trylock与lock的优先级解决方案

2013-03-21 
trylock与lock的优先级如题:测试代码如下,为何线程一中while的最后不sleep 1s,那么线程2trylock就永远的得

trylock与lock的优先级
如题:
测试代码如下,为何线程一中while的最后不sleep 1s,那么线程2trylock就永远的得不到锁,这个正常吗?


#include <stdio.h>
#include <pthread.h>


pthread_mutex_t mutex;
pthread_cond_t cond;
int sum = 0;
void *thread1(void *arg)
{
while(1)
{
pthread_mutex_lock(&mutex);
sum++;
printf("thread1--->%d\n",sum);
sleep(3);
pthread_mutex_unlock(&mutex);
printf("thread1--->\n");
printf("thread1--->\n");
printf("thread1--->\n");
printf("thread1--->\n");
printf("thread1--->\n");
printf("thread1--->\n");
sleep(1);   /*只有开启睡眠才可以让trylock获得锁*/
}
}

void *thread2(void *arg) 
{
printf("start thread2....\n");
while(1)
{
int rel = pthread_mutex_trylock(&mutex);
if(0 == rel)
{
sum--;
printf("thread2-->%d\n",sum);
pthread_mutex_unlock(&mutex);
}

}
}

int main() 
{
printf("test\n");
sleep(1);
pthread_t thid1, thid2;
printf("condition variable study!\n");
pthread_mutex_init(&mutex, NULL);
pthread_cond_init(&cond, NULL);
pthread_create(&thid1, NULL, (void *) thread1, NULL);
pthread_create(&thid2, NULL, (void *) thread2, NULL);

pthread_join(thid1,NULL);
pthread_join(thid2,NULL);
return 0;

}




[解决办法]
引用:
引用:不sleep的话就是大部份时间(sleep(3)的时间)都是线程1占用锁,线程2没有什么机会,唯一的机会就是那一点点的printf和lock的时间。
 我知道、但是两个lock的话 就不一会一直出现这个情况、请问trylock比lock优先级低?

lock是一直在等,trylock是无论成功失败马上返回,所以lock比较容易等到。

热点排行