書いたプログラムを書いたのですが、思った通りに動作しません。thread
トリガーfunc
とanotherThread
トリガーの2つのスレッドがありますanotherFunc
。私がやりたかったのは、で値に達したときにcont
、とを使用してトリガーされることです。奇妙なことに、コメントを外すとすべてが正常に機能します。私はスレッドに不慣れで、ここのチュートリアルに従っていました。彼らの例の行にコメントすると、それも壊れます。10
func
anotherThread
pthread_cond_wait
pthread_cond_signal
sleep(1)
sleep
sleep()
私の質問は、電話なしでこれをどのように機能させることができるかということです。そして、私のコードで両方が後func
に到達した場合はどうなりますか?どうすればこれらを制御できますか?これは私のコードです:pthread_mutex_lock
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でのスレッドとネットワークに関するいくつかの優れたリファレンスまたはコース/チュートリアルを知っていますか?チャットクライアントの作成について学びたいのですが、そのためのスレッドとネットワークについて知っておく必要があると聞きました。問題は、私が何を知らなければならないかわからないので、私が学んだことが大丈夫かどうかはかなりよくわからないということです。
どうもありがとう :)