-1

私はマルチスレッドが初めてです。以下のプログラムを実行すると、次のような出力が得られます

Function1
Function2
1000...1001

しかし、プログラムをデバッグしているときは、期待どおりに出力されています。

1000...1001
Function1
Function2

したがって、直接実行時 (デバッグなし) モードでは、同期の問題が発生していると思います。しかし、私が混乱しているのは、mutexなぜ同期の問題が発生しているのかということです。

私を助けてください。

#include <iostream>
#include <cstdlib>
#include <pthread.h>

using namespace std;

pthread_mutex_t myMutex;
void * function1(void * arg);
void * function2(void * arg);
void * function0(void * arg);
int count = 0;
const int COUNT_DONE = 10;

main()
{
  pthread_t thread1, thread2, thread0;
  pthread_mutex_init(&myMutex, 0);
  pthread_create(&thread0, NULL, &function0, NULL );
  pthread_create(&thread1, NULL, &function1, NULL );
  pthread_create(&thread2, NULL, &function2, NULL );
  pthread_join(thread0, NULL );
  pthread_join(thread1, NULL );
  pthread_join(thread2, NULL );
  pthread_mutex_destroy(&myMutex);
  return 0;
}

void *function1(void * arg)
{
  cout << "Function1\n";
}

void *function0(void *arg)
{
  int i, j;
  pthread_mutex_lock(&myMutex);
  for (i = 0; i <= 1000; i++)
  {
    for (j = 0; j <= 1000; j++)
    {
    }
  }
  cout << i << "..." << j << endl;
  pthread_mutex_unlock(&myMutex);
}

void *function2(void * arg)
{
  cout << "Function2\n";
}
4

1 に答える 1

1

" ... 同期の問題が発生しています " どこに問題がありますか?

スレッドはどのような場合でも同期されないため、スレッドの出力は任意の順序で発生する可能性があります。

ミューテックスは1 つのスレッドでのみ使用されます。

また

Function1
1000...1001 
Function2

期待通りの妥当な結果かもしれません。

としても:

1000
Function1
... 
Function2
1001

変更function1()などfunction2()

void *function1(void * arg)
{
  pthread_mutex_lock(&myMutex);
  cout << "Function1\n";
  pthread_mutex_unlock(&myMutex);
}

void *function2(void * arg)
{
  pthread_mutex_lock(&myMutex);
  cout << "Function2\n";
  pthread_mutex_unlock(&myMutex);
}

プログラムが私の例の出力の2番目を生成するのを防ぎます。

于 2013-09-30T19:07:38.220 に答える