我写了一个程序,但它并没有像我期望的那样工作。我有两个线程:thread
triggersfunc
和anotherThread
triggers anotherFunc
。我想做的是当cont
达到 , 的值时10
使用and触发。奇怪的是,如果我取消注释该行,一切正常。我是线程的新手,我在这里遵循教程,如果我在他们的示例中评论该行,它也会中断。func
anotherThread
pthread_cond_wait
pthread_cond_signal
sleep(1)
sleep
我的问题是如何在没有任何sleep()
电话的情况下完成这项工作?如果在我的代码中都func
达到pthread_mutex_lock
after会发生什么anotherFunc
?我该如何控制这些事情?这是我的代码:
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
pthread_mutex_t myMutex;
pthread_cond_t cond;
pthread_attr_t attr;
int cont;
void *func(void*)
{
printf("func\n");
for(int i = 0; i < 20; i++)
{
pthread_mutex_lock(&myMutex);
cont++;
printf("%d\n", cont);
if(cont == 10)
{
printf("signal:\n");
pthread_cond_signal(&cond);
// sleep(1);
}
pthread_mutex_unlock(&myMutex);
}
printf("Done func\n");
pthread_exit(NULL);
}
void *anotherFunc(void*)
{
printf("anotherFunc\n");
pthread_mutex_lock(&myMutex);
printf("waiting...\n");
pthread_cond_wait(&cond, &myMutex);
cont += 10;
printf("slot\n");
pthread_mutex_unlock(&myMutex);
printf("mutex unlocked anotherFunc\n");
printf("Done anotherFunc\n");
pthread_exit(NULL);
}
int main(int argc, char *argv[])
{
pthread_t thread;
pthread_t anotherThread;
pthread_attr_init(&attr);
pthread_mutex_init(&myMutex, NULL);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
pthread_cond_init(&cond, NULL);
pthread_create(&anotherThread, &attr, anotherFunc, NULL);
pthread_create(&thread, &attr, func, NULL);
pthread_join(thread, NULL);
pthread_join(anotherThread, NULL);
printf("Done MAIN()");
pthread_mutex_destroy(&myMutex);
pthread_cond_destroy(&cond);
pthread_attr_destroy(&attr);
pthread_exit(NULL);
return 0;
}
抱歉,这篇文章很长,但我是线程新手,我愿意学习。你还知道一些关于 Linux 上线程和网络的很好的参考资料或课程/教程吗?我想学习创建一个聊天客户端,我听说我必须知道线程和网络。问题是我不知道我所学的东西是否很好,因为我不知道我必须知道什么。
非常感谢 :)