私は大きな問題があります。私が期待しているように、Cのミューテックスがなぜうまくいかないのか分かりません。 これは私のコードです:私は起こることを期待何POSIX Cスレッド。ミューテックスの例。期待どおりに動作しない
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
pthread_t mythread;
pthread_mutex_t mymutex;
void *anotherFunc(void*)
{
pthread_mutex_lock(&mymutex);
for(int i = 0; i < 100; i++)
printf("anotherFunc\n");
pthread_mutex_unlock(&mymutex);
pthread_exit(NULL);
}
void *func(void*)
{
pthread_mutex_lock(&mymutex);
for(int i = 0; i < 100; i++)
printf("func\n");
pthread_mutex_unlock(&mymutex);
pthread_exit(NULL);
}
int main(int argc, char *argv[])
{
pthread_mutex_init(&mymutex, NULL);
pthread_create(&mythread, NULL, func, NULL);
pthread_create(&mythread, NULL, anotherFunc, NULL);
pthread_mutex_destroy(&mymutex);
pthread_exit(NULL);
return EXIT_SUCCESS;
}
は、最初の100「FUNC」のメッセージと、その後100「anotherFunc」のメッセージを印刷するためのプログラムです。私が期待するのは、実行がfuncに達してmutexをロックすることです。実行がanotherFuncに達すると、私はfuncがmutexのロックを解除するまで待つことを期待しています。しかし、私は
FUNC FUNC FUNC anotherFunc anotherFunc anotherFunc FUNC anotherFunc
のような干渉のメッセージを取得し、私はこのことがどのように機能するかを理解していません。助けてください!
ためでpthread_join()関数を使用することができ、このように私はそれがうまくいくと思う:) これは、興味のある人のための私の最終的なコードです... http://pastebin.me/bc23773578d79a55882d7ced4e04b026 –
まだ壊れています。あなたはmutexを破壊するときに* one *スレッドが終了したことだけを確認します。もう1つはまだ行われていない場合はどうなりますか?どういうわけか強制しない限り、スレッドが起動したり、ミューテックスを獲得したり、特定の順序で終了するという保証はありません。 (マルチスレッディングのレッスン1は、次のようなものです:物事が確実にその順序で起こるようにするには、特定の順序で起こることが保証されています) –
はい、しかし、両方の機能が1つのスレッド、つまり唯一のスレッド:mythreadで開始されています。 そうするのは大丈夫ですか、ある機能に1つのスレッドを使用するのはいつも安全ですか? –