條件變數實現如下:
#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...