1、pv 原語實現生產者消費者問題,用C語言編程
下面是我本學期做過的一個課程設計
你可以參考一下,應該差不多
一、如何建立線程
用到的頭文件
(a)pthread.h
(b)semaphore.h
(c) stdio.h
(d)string.h
定義線程標識
pthread_t
創建線程
pthread_create
對應了一個函數作為線程的程序段
注意的問題
要保證進程不結束(在創建線程後加死循環)
在線程中加入While(1)語句,也就是死循環,保證進程不結束。
二、控制線程並發的函數
sem_t:信號量的類型
sem_init:初始化信號量
sem_wait:相當於P操作
sem_post:相當於V操作
三、實現原形系統
父親、母親、兒子和女兒的題目:
桌上有一隻盤子,每次只能放入一隻水果。爸爸專放蘋果,媽媽專放橘子,一個兒子專等吃盤子中的橘子,一個女兒專等吃盤子中的蘋果。分別用P,V操作和管程實現
每個對應一個線程
pthread_t father; father進程
pthread_t mother; mother進程
pthread_t son; son進程
pthread_t daughter; daughter進程
盤子可以用一個變數表示
sem_t empty;
各線程不是只做一次,可以是無限或有限次循環
用While(1)控制各線程無限次循環
輸出每次是那個線程執行的信息
printf("%s\n",(char *)arg);通過參數arg輸出對應線程執行信息
編譯方法
gcc hex.c -lpthread
生成默認的可執行文件a.out
輸入./a.out命令運行
查看結果:程序連續運行顯示出
father input an apple.
daughter get an apple.
mother input an orange.
son get an orange.
mother input an orange.
son get an orange.
………………..
四、程序源代碼
#include <stdio.h>
#include<string.h>
#include <semaphore.h>
#include <pthread.h>
sem_t empty; //定義信號量
sem_t applefull;
sem_t orangefull;
void *procf(void *arg) //father線程
{
while(1){
sem_wait(&empty); //P操作
printf("%s\n",(char *)arg);
sem_post(&applefull); //V操作
sleep(7);
}
}
void *procm(void *arg) //mother線程
{
while(1){
sem_wait(&empty);
printf("%s\n",(char *)arg);
sem_post(&orangefull);
sleep(3);
}
}
void *procs(void *arg) //son線程
{
while(1){
sem_wait(&orangefull);
printf("%s\n",(char *)arg);
sem_post(&empty);
sleep(2);
}
}
void *procd(void *arg) //daughter線程
{
while(1){
sem_wait(&applefull);
printf("%s\n",(char *)arg);
sem_post(&empty);
sleep(5);
}
}
main()
{
pthread_t father; //定義線程
pthread_t mother;
pthread_t son;
pthread_t daughter;
sem_init(&empty, 0, 1); //信號量初始化
sem_init(&applefull, 0, 0);
sem_init(&orangefull, 0, 0);
pthread_create(&father,NULL,procf,"father input an apple."); //創建線程
pthread_create(&mother,NULL,procm,"mother input an orange.");
pthread_create(&daughter,NULL,procd,"daughter get an apple.");
pthread_create(&son,NULL,procs,"son get an orange.");
while(1){} //循環等待
}
2、linux C編程 信號量sys/sem 有等待超時么
可以用semtimedop
3、linux下,用gcc編譯c代碼,error:undefined reference to sem_wait 怎麼解決?謝謝! 請問 在哪兒找到的
#include <semaphore.h>
int sem_wait(sem_t *sem);
int sem_trywait(sem_t *sem);
int sem_timedwait(sem_t *sem, const struct timespec *abs_timeout);
Link with -lrt or -pthread.
自己看最後一句....手冊裡面寫著呢....link with -lrt or -pthread
4、急!LINUX下,GCC編譯,原程序包含<semaphore.h>頭文件,為什麼編譯時說sem_wait,sem_post等未定義的引用
編譯時加上參數:-lpthread
要看報錯的階段,是在編譯還是鏈接階段.
如果編譯時函數沒有找到,那是頭文件的問題,如果鏈接時未定義引用,那是c庫的問題.
如果你的頭文件都正常包含了,那可能你的c庫沒有使能semaphore的支持.
5、sem掃描電鏡下只有C,N,O,怎麼解釋
M
6、sem廣告語中的br,tos,ss,nl,c分別代表什麼意思
sem是搜索引擎營銷的簡稱,包括SEO和PPC,至於在sem廣告語中這幾個意思,本人從業搜索引擎營銷已經3年有餘,還真沒見過。。最好問問你們行業的同事吧。
7、銀行類應用系統名詞解釋,TOPS,IFE,SEM,B-EAI,ATM-C,ATM-P,的具體意思。急急急!!!
TOPS數據探針由控制伺服器集中管理的數據採集設備,負責進行各種操作痕跡的抓取,包括交易報文、屏幕畫面等動態和靜態痕跡信息,並傳送給控制伺服器,作為監控分析的基礎依據。
TOPS控制伺服器負責接收和保存所抓取的各種操作痕跡信息,並根據設定好的監控要點和監控規則對這些痕跡信息進行動態分析,滿足監控條件的情況下進行報警。
TOPS用戶控制台包括本地用戶控制台與WEB控制台。
內部因素評價矩陣(Internal Factor Evaluation Matrix,IFE矩陣),是一種對內部因素進行分析的工具,其做法是從優勢和劣勢兩個方面找出影響企業未來發展的關鍵因素,根據各個因素影響程度的大小確定權數,再按企業對各關鍵因素的有效反應程度對各關鍵因素進行評分,最後算出企業的總加權分數。通過IFE,企業就可以把自己所面臨的優勢與劣勢匯總,來刻劃出企業的全部引力。
SEM:結構方程模型(Structural·Equation·Modeling,SEM) 結構方程模型是社會科學研究中的一個非常好的方法。該方法在20世紀80年代就已經成熟,可惜國內了解的人並不多。「在社會科學以及經濟、市場、管理等研究領域,有時需處理多個原因、多個結果的關系,或者會碰到不可直接觀測的變數(即潛變數),這些都是傳統的統計方法不能很好解決的問題。20世紀80年代以來,結構方程模型迅速發展,彌補了傳統統計方法的不足,成為多元數據分析的重要工具。
B-EAI:EAI(Enterprise Application Integration),是企業應用集成 EAI是將基於各種不同平台、用不同方案建立的異構應用集成的一種方法和技術。EAI通過建立底層結構,來聯系橫貫整個企業的異構系統、應用、數據源等,完成在企業內部的 ERP、CRM、SCM、資料庫、數據倉庫,以及其他重要的內部系統之間無縫地共享和交換數據的需要。有了 EAI,企業就可以將企業核心應用和新的Internet解決方案結合在一起。(B2B、B2C-EAI)
ATM-C:自動取款機模擬程序,atm機c語言程序。
ATM-P :ATM PIM自動取款機個人信息管理。