溫馨提示×

C語言多線程并行時如何同步

小樊
95
2024-07-12 20:28:38
欄目: 編程語言

在C語言中進行多線程并行時,可以通過使用互斥鎖(mutex)、條件變量(condition variable)等同步機制來保證線程安全和數據一致性。下面是一些常用的同步方法:

  1. 互斥鎖(mutex):互斥鎖用于保護共享資源,只允許一個線程在同一時間訪問共享資源。線程在訪問共享資源之前先獲取互斥鎖,訪問完成后再釋放互斥鎖。
pthread_mutex_t mutex;
pthread_mutex_init(&mutex, NULL);

// 線程1加鎖
pthread_mutex_lock(&mutex);
// 訪問共享資源
// 線程1解鎖
pthread_mutex_unlock(&mutex);

// 線程2加鎖
pthread_mutex_lock(&mutex);
// 訪問共享資源
// 線程2解鎖
pthread_mutex_unlock(&mutex);

pthread_mutex_destroy(&mutex);
  1. 條件變量(condition variable):條件變量用于線程之間的通信,當某個條件不滿足時,線程可以等待條件變量的通知。當條件滿足時,可以通過廣播或者信號喚醒等待的線程。
pthread_cond_t cond;
pthread_mutex_t mutex;

pthread_cond_init(&cond, NULL);
pthread_mutex_init(&mutex, NULL);

// 線程1等待條件滿足
pthread_mutex_lock(&mutex);
while (condition_not_met) {
    pthread_cond_wait(&cond, &mutex);
}
// 條件滿足后,繼續(xù)執(zhí)行

// 線程2發(fā)送通知
pthread_mutex_lock(&mutex);
// 修改條件
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);

pthread_cond_destroy(&cond);
pthread_mutex_destroy(&mutex);

除了互斥鎖和條件變量,還可以使用信號量(semaphore)、屏障(barrier)等同步機制來實現線程間的同步和協(xié)作。在多線程編程中,合理使用同步機制可以避免數據競爭和死鎖等問題,并提高程序的并發(fā)性能。

0