C語言實現生產者消費者(條件變數和訊號量)問題?

2021-10-11 17:07:46 字數 1358 閱讀 9421

條件變數實現如下:

#include #include #include #include //節點結構體

struct msg

;struct msg *head = null;//頭指標

//struct msg *mp = null; //節點指標

//利用巨集定義的方式初始化全域性的互斥鎖和條件變數

pthread_mutex_t mutex = pthread_mutex_initializer;

pthread_cond_t has_product = pthread_cond_initializer;

void *producter(void *arg)

return null;

}void *consumer(void *arg)

mp = head;

head = mp->next;

pthread_mutex_unlock(&mutex);

printf("------------------consumer--%d\n", mp->num);

free(mp); //釋放被刪除的節點記憶體

mp = null;//並將刪除的節點指標指向null,防止野指標

sleep(rand() % 3);

}return null;

}int main(void)

訊號量實現如下:

#include#include#include#define m 5 //生產者消費者數量

#define n 10 //緩衝區最大數量

pthread_mutex_t mutex;

sem_t empty_sem;

sem_t full_sem;

typedef struct bufferbuffer_t;

buffer_t buff = ,0,0,0};

void print()

printf("\n");

}void *consumer(void *arg)

return null;

}void *producer(void *arg)

return null;

}int main()

if(j < m)

}for(i = 0,j = 0; i < m || j < m; i++,j++)

if(j < m)

}pthread_mutex_destroy(&mutex);

sem_destroy(&empty_sem);

sem_destroy(&full_sem);

return 0;

}

c語言實現生產者與消費者

問題描述 有多個程序 多個生產者程序和多個消費者程序共享乙個初始為空 固定大小為n的快取 緩衝區 生產者的工作是製造資料,只有緩衝區沒滿時,生產者才能把訊息放入到緩衝區,否則必須等待 同時,只有緩衝區不空時,消費者才能從中取出訊息,一次消費一段資料 即將其從快取中移出 否則必須等待。由於緩衝區是臨界...

生產者與消費者問題C語言實現

實驗目的 實現生產者 消費者問題的模擬,以便更好的理解此經典程序同步問題。生產者 消費者問題是典型的pv操作問題,假設系統中有乙個比較大的緩衝池,生產者的任務是只要緩衝池未滿就可以將生產出的產品放入其中,而消費者的任務是只要緩衝池未空就可以從緩衝池中拿走產品。緩衝池被占用時,任何程序都不能訪問。每乙...

GO語言實現生產者消費者模型

一 只使用channel實現package main import fmt math rand sync time 生產者函式 func producter index int ch chan int 消費者函式 func consumer index int ch chan int func ma...