当前位置: 技术问答>linux和unix
大家帮看一下代码啊,有一个小错误找不出来
来源: 互联网 发布时间:2016-10-25
本文导语: #include #include #include #include #include #include #include #include #define N 3 pthread_mutex_t mutex_w,mutex_r; // 定义读写互斥锁 sem_t sem_w,sem_r; //定义读写信号量 int data[N]; int pos=0; void *function_w(void *arg) { int w = *(int *)arg; pos = w;...
#include
#include
#include
#include
#include
#include
#include
#include
#define N 3
pthread_mutex_t mutex_w,mutex_r; // 定义读写互斥锁
sem_t sem_w,sem_r; //定义读写信号量
int data[N];
int pos=0;
void *function_w(void *arg)
{ int w = *(int *)arg;
pos = w; while(1)
{ usleep(100000);
sem_wait(&sem_w);//等待可写的资源
pthread_mutex_lock(&mutex_w);//禁止别的线程写此资源
data[pos] = w; w++; w++; w++; pos++; pos=pos%N;
thread_mutex_unlock(&mutex_w);//别的线程可写此资源
sem_post(&sem_r);// 释放一个读资源
} return (void *)0;
}
void *function_r(void *arg)
{
while(1)
{
sem_wait(&sem_r);//等待可读的资源
pthread_mutex_lock(&mutex_r);//禁止别的线程读此资源
printf("%dn",data[(pos+N-1)%N]);
pthread_mutex_unlock(&mutex_r);//别的线程可读此资源
sem_post(&sem_w);// 释放一个写资源
}
return (void *)0;
}
int main(int argc, char **argv)
{
pthread_t thread[2*N]; int i;
pthread_mutex_init(&mutex_w,NULL);
pthread_mutex_init(&mutex_r,NULL);
sem_init(&sem_w,0,N);
sem_init(&sem_r,0,0);
for(i=0;i