我是多線程新手。 當我運行下面的程序它給輸出爲什麼同步不在多線程應用程序中發生C++
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";
}
什麼是空循環?編譯器可能會刪除它們。另外,請解釋互斥鎖應如何強制執行命令 – Leeor
@Leeor:Mtex用於同步目的! –
你不應該在'function2'和'function1'上使用互斥嗎? – streppel