執行緒 同步與互斥 消費者 生產者模型

2021-10-07 06:05:12 字數 2037 閱讀 1392

執行緒互斥用互斥鎖,執行緒的同步則用到條件變數。

條件變數是用來描述執行緒間同步的。

下面以生產者、消費者為例

生產者和消費者之間存在同步與互斥的關係。生產者之間、消費者之間存在互斥的關係

#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...

多執行緒的同步與互斥機制(生產者 消費者模型)

同步 所有執行緒以某種順序依次訪問臨界資源。同步機制的實現 條件變數 是利用執行緒間共享的全域性變數進行同步的機制。乙個執行緒等待 條件變數的條件成立 而掛起 另乙個執行緒使 條件成立 給出條件成立訊號 為了防止競爭資源,條件變數總是和互斥鎖結合使用 為什麼要實現同步機制呢?為了防止競爭資源 以生產...