多執行緒中條件變數的使用:
// 執行緒同步之條件變數
#include #include #include #include #include #include #include #include using namespace std;
// 乙個簡單的緩衝區類
struct ******buffer
bool full()
return false;
}bool empty()
bool push(int data)
bool pop(int& data)
};// 公共緩衝區,給生產者和消費者讀寫
******buffer common_buffer;
// 條件變數
// 緩衝區未滿條件變數
pthread_cond_t cond_buffer_not_full;
// 緩衝區不為空條件變數
pthread_cond_t cond_buffer_not_empty;
// 緩衝區鎖
pthread_mutex_t buffer_lock;
// 生產者執行緒
void* producer(void* data)
// 往緩衝區中新增資料
common_buffer.push(count);
// 通知消費者,緩衝區不為空
pthread_cond_signal(&cond_buffer_not_empty);
// 解鎖
pthread_mutex_unlock(&buffer_lock);
sleep(1);
}}// 消費者執行緒
void* consumer(void* data)
// 從緩衝區中消耗資料
int data;
common_buffer.pop(data);
cout << data << endl;
// 通知生產者,緩衝區不滿
pthread_cond_signal(&cond_buffer_not_full);
// 解鎖
pthread_mutex_unlock(&buffer_lock);
++count;
}}// 主函式
int main(int argc,char* argv)
執行緒同步 條件變數
當我們需要控制對記憶體資源的訪問的時候,可以用一種簡單的加鎖的方法來控制,即互斥鎖。但互斥鎖有乙個明顯的缺點,就是它只有兩個狀態 鎖定和非鎖定。而條件變數通過允許執行緒阻塞和等待另乙個執行緒傳送訊號的方法彌補來互斥鎖的不足。條件變數通常和互斥鎖一起使用。使用過程 1.呼叫pthread mutex ...
執行緒同步 條件變數
1.問題引入 互斥鎖問題,假設現在有兩個資源a和b,乙個執行緒先拿a再拿b,另乙個則相反,這樣導致的問題就是死鎖,即兩個執行緒無休止的互相等待 include include include include pthread mutex t g mtxa pthread mutex initializ...
執行緒同步 條件變數
條件變數本身不是鎖!但它也可以造成執行緒阻塞。通常與互斥鎖配合使用。給多執行緒提供乙個會合的場所。pthread cond init函式 pthread cond destroy函式 pthread cond wait函式 pthread cond timedwait函式 pthread cond ...