如何在pthread_cond_signal函数中传递变量?

时间:2013-10-07 09:17:35

标签: multithreading pthreads

我是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;
}

1 个答案:

答案 0 :(得分:1)

您正在使用线程。程序的所有线程彼此共享内存。问题不是从其他线程读取变量。问题是以正确的顺序阅读它们:不是半更新,过时或未来。

解决这个问题是互斥和信号量以及条件的全部原因。

您要做的是不通过pthread_cond_signal传递值。你所做的是将值设置为线程可以读取的一些内存,然后发送信号。

我不禁想知道为什么你认为pthread_cond_signal((pthread_cond_t *)s)会起作用? s不是,也从来不是一个条件。 pthread_cond_t不是您传递的值。它是POSIX线程库用于跟踪条件状态的结构。