執行緒互斥用互斥鎖,執行緒的同步則用到條件變數。
條件變數是用來描述執行緒間同步的。
下面以生產者、消費者為例
生產者和消費者之間存在同步與互斥的關係。生產者之間、消費者之間存在互斥的關係
#include#include#includestatic int i = 1;
pthread_mutex_t lock; //用來表述生產者和消費者之間的互斥關係的
pthread_mutex_t lock1; //表述生產者和生產者之間的互斥關係
pthread_mutex_t lock2; //表述
pthread_cond_t cond; //表述生產者和消費者之間同步關係
typedef struct node
node;
struct node *head; //定義乙個帶頭結點的鍊錶
node* buy_node(node* head,int data)
void init(node** head) //鍊錶的初始化
void push(node* head,int data) //頭插資料
int pop(node* head,int* arr) //刪除資料,並且寫入arr裡
//頭刪 資料**先出
//node* tmp = head->_next;
//head->_next = tmp->_next;
//*arr = tmp->_data;
//尾刪 相當於資料先入先出
node* tmp = head;
node* prev = null;
while(tmp->_next)
prev->_next = null;
*arr = tmp->_data;
free(tmp);
tmp = null;
return 0;
} void *product(void *arg) //生產者程序
}void *consumer(void *arg)
pthread_mutex_unlock(&lock);
printf("consumer %d:%d\n",(int)arg,buf);
pthread_mutex_unlock(&lock2);
sleep(1);
}} int main()
//只有乙個生產者乙個消費者時的結果
[fbl@localhost cond]$ ./my_cond
consumer wait... product done...
product:1
consumer:1
consumer wait... product done...
product:2
consumer:2
consumer wait... product done...
//兩個生產者 兩個消費者時的結果
[fbl@localhost cond]$ ./my_cond
consumer wait... product done...
product 2:1
consumer 2:1
consumer wait... product done...
product 1:2
consumer 1:2
product 2:3
consumer 2:3
product 1:4
consumer 1:4
product 2:5
consumer 2:5
product 1:6
consumer 1:6
product 2:7
consumer 2:7
product 1:8
consumer 1:8
product 2:9
consumer 2:9
product 1:10
consumer 1:10
生產者之間、消費者之間各自需要一把互斥鎖來管理。
執行緒的同步與互斥 生產者消費者模型
生產者與消費者模型 生產者與消費者模型是一種描述程序間同步與互斥的乙個方式,在這個模式下有兩類人,乙個是不停產生資料的生產者,乙個是不停獲取資料的消費者,為了效率最高,就必須保持兩者之間的同步與互斥。為了在生產者與消費者使用mutex保持互斥的前提下,posix版本下還有另外乙個函式cond它的作用...
生產者與消費者模型(執行緒)
include include include include include include define queue size 100 define ok 0 define error 1 typedef int datatype typedef struct seqqueue struct m...
多執行緒的同步與互斥機制(生產者 消費者模型)
同步 所有執行緒以某種順序依次訪問臨界資源。同步機制的實現 條件變數 是利用執行緒間共享的全域性變數進行同步的機制。乙個執行緒等待 條件變數的條件成立 而掛起 另乙個執行緒使 條件成立 給出條件成立訊號 為了防止競爭資源,條件變數總是和互斥鎖結合使用 為什麼要實現同步機制呢?為了防止競爭資源 以生產...