日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

linux usleep 线程控制权_linux多线程同步—信号量

發(fā)布時(shí)間:2023/12/1 linux 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux usleep 线程控制权_linux多线程同步—信号量 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

linux多線程編程-信號(hào)量

信號(hào)量機(jī)制

鎖機(jī)制使用是有限制的,鎖只有兩種狀態(tài),即加鎖和解鎖,對(duì)于互斥的訪問(wèn)一個(gè)全局變量,這樣的方式還可以對(duì)付,但是要是對(duì)于其他的臨界資源,比如說(shuō)多臺(tái)打印機(jī)等,這種方式顯然不行了。

信號(hào)量機(jī)制在操作系統(tǒng)里面學(xué)習(xí)的比較熟悉了,信號(hào)量是一個(gè)整數(shù)計(jì)數(shù)器,其數(shù)值表示空閑臨界資源的數(shù)量。

當(dāng)有進(jìn)程釋放資源時(shí),信號(hào)量增加,表示可用資源數(shù)增加;當(dāng)有進(jìn)程申請(qǐng)到資源時(shí),信號(hào)量減少,表示可用資源數(shù)減少。這個(gè)時(shí)候可以把鎖機(jī)制認(rèn)為是0-1信號(hào)量。

關(guān)于信號(hào)量機(jī)制的函數(shù) 初始化信號(hào)量

int sem_init(sem_t * sem, int pshared, unsigned int value);

- 成功返回0,失敗返回-1;

- 參數(shù)sem:表示指向信號(hào)結(jié)構(gòu)的指針。

- 參數(shù)pshared:不是0 的時(shí)候該信號(hào)量在進(jìn)程間共享,否則只能在當(dāng)前進(jìn)程的所有線程間共享。

- 參數(shù)value:信號(hào)量的初始值。

int sem_wait(sem_t *sem); 信號(hào)量減一操作,有線程申請(qǐng)資源

- 成功返回0,否則返回-1

- 參數(shù)sem:指向一個(gè)信號(hào)量的指針

int sem_post(sem_t *sem);信號(hào)量加一操作,有線程釋放資源

- 成功返回0,否則返回-1

- 參數(shù)sem:指向一個(gè)信號(hào)量指針

int sem_destroy(sem_t *sem); 銷毀信號(hào)量

- 成功返回0,否則返回-1

- 參數(shù)sem:指向一個(gè)信號(hào)量的指針。

信號(hào)量來(lái)解決多線程的同步問(wèn)題,程序代碼如下

#include

#include

#include

#include

#include

#include

void* ticketport1(void*);

void* ticketport2(void*);

int tickets=100;

sem_t mutex,full; //定義兩個(gè)信號(hào)量

int main()

{

int ret;

pthread_t id1,id2;

ret=sem_init(&mutex,0,1); //初始化mutex信號(hào)量為1

ret+=sem_init(&full,0,0); //初始化full信號(hào)量為0

if(ret!=0)

{

perror("sem_init");

}

ret=pthread_create(&id1,NULL,ticketport1,NULL);

if(ret<0)

{

perror("creat thread1:");

exit(-1);

}

ret=pthread_create(&id2,NULL,ticketport2,NULL);

if(ret<0)

{

perror("creat thread2:");

exit(-1);

}

pthread_join(id1,NULL);

pthread_join(id2,NULL);

return 0;

}

void* ticketport1(void* arg)

{

while(1)

{

sem_wait(&mutex); //mutex信號(hào)量進(jìn)行P操作

if(tickets>0)

{

usleep(1000);

printf("thread1 sell ticket: %d",tickets--);

sem_post(&full); //full信號(hào)量進(jìn)行V操作

}

else

{

sem_post(&full); //full信號(hào)量進(jìn)行V操作

break;

}

}

return (void*)0;

}

void* ticketport2(void* arg)

{

while(1)

{

sem_wait(&full); //full信號(hào)量進(jìn)行P操作

if(tickets>0)

{

usleep(1000);

printf("thread2 sell ticket: %d",tickets--);

sem_post(&mutex); //mutex信號(hào)量進(jìn)行V操作

}

else

{

sem_post(&mutex); //mutex信號(hào)量進(jìn)行V操作

break;

}

}

return (void*)0;

}

上面的sem_init函數(shù)用來(lái)初始化兩個(gè)信號(hào)量的初始化值,這里一個(gè)設(shè)為1,一個(gè)設(shè)為0,sem_wait類似于P操作,讓信號(hào)量減1,如果小于結(jié)果小 于0,線程阻塞,否則線程繼續(xù)執(zhí)行,sem_post類似于V操作,提升信號(hào)量的值,加1,通過(guò)這兩個(gè)信號(hào)量之間的互相“救對(duì)方”,就可以實(shí)現(xiàn)這兩個(gè)線程 的同步執(zhí)行

經(jīng)典的生產(chǎn)者消費(fèi)者問(wèn)題,只有當(dāng)生產(chǎn)者把資源放入存儲(chǔ)區(qū),消費(fèi)者才能取得

#include

#include

#include

#include

#define MAXSIZE 10

int stack[MAXSIZE];

int size =0;

sem_t sem;

void privide_data(void)

{

int i;

for(i =0;i

{

stack[i] = i;

sem_post(&sem);

}

}

void handle_data(void)

{

int i;

while((i = size ++)

{

sem_wait(&sem);

printf("cross : %d X %d = %d ",stack[i],stack[i],stack[i] * stack[i]);

sleep(1);

}

}

int main()

{

pthread_t privider,handler;

sem_init(&sem,0,0);

pthread_create(&privider,NULL,(void *)&privide_data,NULL);

pthread_create(&handler,NULL,(void *)&handle_data,NULL);

pthread_join(privider,NULL);

pthread_join(handler,NULL);

sem_destroy(&sem);

return 0;

}

總結(jié)

以上是生活随笔為你收集整理的linux usleep 线程控制权_linux多线程同步—信号量的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 最新在线视频 | 老司机一区二区三区 | 国产亚洲精久久久久久无码苍井空 | 中文有码在线播放 | 光棍天堂av| 日本中文字幕在线 | 中文字幕精品一区二区精 | 天天操网址 | 日韩中文网 | 欧美成人三级视频 | 性农村xxxxx小树林 | 呦呦色 | 久久久久在线观看 | 国产1区二区 | www日韩av | 国产精品大屁股白浆一区 | 日韩精品人妻中文字幕 | 亚洲成人少妇 | 欧美理论在线观看 | 久久午夜夜伦鲁鲁片无码免费 | 国产情侣在线播放 | 海量av资源 | 爱爱爱爱网站 | 国产一级美女 | 午夜天堂视频 | 色悠悠久久综合 | 亚洲精品在线免费观看视频 | aaaaaa毛片| 精品一区二区三区三区 | 国产精品tv | 草草久久久 | 欧美第一视频 | 国产在线精品视频 | 欧美香蕉 | 亚洲激情自拍偷拍 | 熟女少妇a性色生活片毛片 亚洲伊人成人网 | 亚洲国产成人一区 | 在线不卡一区二区 | 免费人成视频在线播放 | 无码人妻久久一区二区三区蜜桃 | 亚洲综合另类 | av黄色一级片 | 91免费高清| 欧美黄色性生活 | 欧美亚洲二区 | 欧美一级久久久 | 国产夫妻一区 | 午夜寂寞剧场 | 国产精品2018 | 双性受孕h堵精大肚生子 | 久久精品aⅴ无码中文字字幕重口 | 无码av天堂一区二区三区 | 国产日皮视频 | 无码成人一区二区 | 久久思 | 四虎影视黄色 | 九九热精品视频在线观看 | 国产黄色片视频 | 蜜桃视频免费网站 | 伊人福利在线 | 午夜影剧院 | 美女av网站 | 色男人天堂av | 一乃葵在线 | 久热青草| 福利社午夜影院 | 欧美jizz19性欧美 | 午夜精品久久99蜜桃的功能介绍 | 美女露出粉嫩尿囗让男人桶 | 免费看91视频 | 麻豆亚洲一区 | 精品视频成人 | 国产污视频在线播放 | 日日噜噜噜 | 国产高清视频 | 伊人88| 99re8在线精品视频免费播放 | 精品国产99 | 欧美黄频| 欧美亚洲欧美 | www.玖玖玖 | 国产一区二区三区四区五区在线 | 久久国产色av免费观看 | 亚洲色欧美另类 | www.日韩.com | 麻豆网站免费观看 | 日韩乱码在线观看 | 一区二区三区午夜 | 国产午夜精品在线观看 | 色天天综合 | 伊人影院综合在线 | 成人黄色免费在线观看 | 日韩免费在线视频 | 一区二区片 | 天天曰夜夜曰 | 密桃成熟时在线观看 | 少妇高潮惨叫久久久久 | 欧美精品黄色 | 国产成人自拍一区 |