我是pthread编程的新手。我正在编写一个示例代码,我想在pthread_cond_signal()中传输变量,如下所示
pthread_t th1,th2;
pthread_cond_t con1 = PTHREAD_COND_INITIALIZER;
pthread_cond_t con2 = PTHREAD_COND_INITIALIZER;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
void* fun(void *gh)
{
pthread_mutex_lock(&mutex);
flag=1;
pthread_cond_wait(&con1,&mutex);
printf("This is test\n");
pthread_mutex_unlock(&mutex);
}
int main()
{
char *s;
int a;
s=malloc(sizeof(char)*4);
printf("Enter thread Number \n");
scanf("%d",&a);
sprintf(s,"con%d",a);
pthread_create(&th1,NULL,fun,NULL);
sleep(1);
while(flag==0) //wait until pthread_cond_wait is called
{}
pthread_mutex_lock(&mutex);
pthread_cond_signal((pthread_cond_t *)s);
pthread_mutex_unlock(&mutex);
pthread_join(th1,NULL);
pthread_join(th2,NULL);
return 0;
}
答案 0 :(得分:1)
您正在使用线程。程序的所有线程彼此共享内存。问题不是从其他线程读取变量。问题是以正确的顺序阅读它们:不是半更新,过时或未来。
解决这个问题是互斥和信号量以及条件的全部原因。
您要做的是不通过pthread_cond_signal传递值。你所做的是将值设置为线程可以读取的一些内存,然后发送信号。
我不禁想知道为什么你认为pthread_cond_signal((pthread_cond_t *)s)
会起作用? s
不是,也从来不是一个条件。 pthread_cond_t
不是您传递的值。它是POSIX线程库用于跟踪条件状态的结构。