当前位置: 技术问答>linux和unix
线程死锁
来源: 互联网 发布时间:2017-03-27
本文导语: 最近在复习操作系统时 遇到了读者与写者问题结果,read发生了死锁 void *read(void *arg) { int id = (int)arg; sleep(rand() %3); pthread_mutex_lock(&rt); readcount++; if(readcount == 1) { pthread_mutex_lock(&wt); } pthread_mutex_unlock(&rt); ...
最近在复习操作系统时 遇到了读者与写者问题结果,read发生了死锁
1.要让读者与写者之间、以及写者与写者之问要互斥地访同数据集;
2.在无写进程到来时各读者可同时访问数据集;
求各位大神解答
void *read(void *arg)
{
int id = (int)arg;
sleep(rand() %3);
pthread_mutex_lock(&rt);
readcount++;
if(readcount == 1)
{
pthread_mutex_lock(&wt);
}
pthread_mutex_unlock(&rt);
printf("%d reader is reading n",id);
sleep(rand() %3);
pthread_mutex_lock(&rt);
--readcount;
if(!readcount)
{
pthread_mutex_unlock(&wt);
}
pthread_mutex_unlock(&rt);
printf("%d reader is leaving and have done n",id);
}
1.要让读者与写者之间、以及写者与写者之问要互斥地访同数据集;
2.在无写进程到来时各读者可同时访问数据集;
求各位大神解答
|
全局变量 readcount的访问要加锁,对于共同访问的变量,在执行过程中被改变值导致死锁。