由於pthread實現並行計算的方式是基於共享內存的,因此在多線程中共享變量的使用存在諸多同步性問題。在多個線程中對同一個變量進行讀的時候可能沒問題,但是在修改的時候,就有可能造成變量內容的不一致。為了解決這個問題,就需要對共享變量進行互斥的訪問。
為了實現這一功能,在pthread中提供了線程鎖,通過加鎖和解鎖就可以輕松避免上述問題,具體實例如下:
#include#include #include #include using namespace std; vector vec; pthread_mutex_t mutex; int thread_count; void *hello(void* a) {
int aa = (int)a; pthread_mutex_lock(&mutex); //加鎖 vec.push_back(aa); pthread_mutex_unlock(&mutex); //解鎖 } int main() { pthread_t threads[4]; thread_count = 4; pthread_mutex_init(&mutex,NULL); for(int thread = 0;thread> thread_count; for(int i=0;i ::iterator it; for(it=vec.begin();it!=vec.end();it++) //print the result cout<<*it<
在上述代碼中實現了使用多線程向vector添加元素,並在主線程中打印出來。需要說明的是,如果在hello中如果不使用互斥鎖,程序運行將出現錯誤。可能是pthread內部對多線程進行了限制,以避免出現類似錯誤。