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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ 并行与分布式编程 chapter5 任务间并发的同步(2)

發布時間:2025/7/14 c/c++ 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ 并行与分布式编程 chapter5 任务间并发的同步(2) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
讀-寫鎖

如果線程只是讀取共享存儲器,那么允許多個線程進入臨界區。任意數量的線程可以擁有一個讀-寫鎖來進行讀操作,但是如果要寫存儲器,就只允許一個線程進行訪問。讀寫鎖常用于讀數據比寫數據多的應用中。POSIX定義pthread_rwlock_t為讀寫鎖。它與互斥鎖有相同的操作,只是有一個pthread_rwlock_rdlock讀封鎖操作()和pthread_rwlock_wrlock()寫封鎖操作。如果一個線程請求讀封鎖,只要沒有任何線程擁有寫封鎖,就可以授權。如果線程請求寫封鎖,那么只要沒有任何線程擁有讀封鎖或寫封鎖,就可以授權。讀寫鎖可以實現CREW并發讀互斥寫

pthread_t ThreadA,ThreadB,ThreadC,ThreadD;

pthread_rwlock_t RWLock;

void *producer1(void *X)

{

?? pthread_rwlock_wrlock(&RWLock);

?? //critical section

?? pthread_rwlock_unlock(&RWLock);

?? return(0);

}

void *producer2(void *X)

{

?? pthread_rwlock_wrlock(&RWLock);

?? //critical section

?? pthread_rwlock_unlock(&RWLock);

}

?void *consumer1(void *X)

{

?? pthread_rwlock_rdlock(&RWLock);

?? //critical section

?? pthread_rwlock_unlock(&RWLock);

?? return(0);

}

?

void *consumer2(void *X)

{

?? pthread_rwlock_rdlock(&RWLock);

?? //critical section

?? pthread_rwlock_unlock(&RWLock);

?? return(0);

}

?

int main(void)

{

?? pthread_rwlock_init(&RWLock,NULL);

?? //set mutex attributes

?? pthread_create(&ThreadA,NULL,producer1,NULL);

?? pthread_create(&ThreadB,NULL,consumer1,NULL);

?? pthread_create(&ThreadC,NULL,producer2,NULL);

?? pthread_create(&ThreadD,NULL,consumer2,NULL);

?? //...

?? return(0);

}

ThreadB and ThreadD can enter their critical sections concurrently or serially but neither thread can enter their critical sections if either ThreadA or ThreadC is in theirs. ThreadA and ThreadC cannot enter their critical sections concurrently
條件變量Condition Variable用來發送事件發生信號的信號量。一旦事件發生,或多個進程或者線程就等待其他進程或線程發送信號。生產者線程發送信號通知消費者線程對象已經加入到隊列中。消費者線程在接收到信號之前處于等待狀態,接收到信號后就繼續處理隊列。

條件變量可以和互斥鎖一起使用:當一個任務試圖加鎖,如果互斥鎖已經加鎖了,這個任務就會被阻塞。如果使用一個條件變量,該條件變量必須與一個互斥鎖相關聯。一旦不被阻塞,任務就會釋放互斥鎖Mutex,同時等待條件變量EventMutex。發送信號操作在時間按發生時是任務向另一個線程或進程發送信號,如果一個任務在等待那個條件變量,那么該任務就不再被阻塞,并獲得互斥鎖。條件變量可以實現4種基本同步關系FF、FS、SS、SF

#pragma comment(lib, "pthreadVC2.lib")

#include <pthread.h>

#include <iostream>

using namespace std;

float Number;

pthread_t ThreadA,ThreadB;

pthread_mutex_t Mutex,EventMutex;

pthread_cond_t Event;

void *worker1(void *X)

{

???????? for(int Count = 1;Count < 100;Count++){

?????????????????? pthread_mutex_lock(&Mutex);

?????????????????? Number++;

?????????????????? pthread_mutex_unlock(&Mutex);

?????????????????? cout << "worker1: number is " << Number << endl;

?????????????????? if(Number == 50){

??????????????????????????? pthread_cond_signal(&Event);

?????????????????? }

???????? }

???????? cout << "worker 1 done" << endl;

???????? return(0);

}

?void *worker2(void *X)

{

???????? pthread_mutex_lock(&EventMutex);

???????? pthread_cond_wait(&Event,&EventMutex);

???????? pthread_mutex_unlock(&EventMutex);

???????? cout<<"work2 is started! Now, Number is:"<<Number<<endl;

???????? for(int Count = 1;Count < 50;Count++){

?????????????????? pthread_mutex_lock(&Mutex);

?????????????????? Number = Number + 20;

?????????????????? pthread_mutex_unlock(&Mutex);

?????????????????? cout << "worker2: number is " << Number << endl;

???????? }

???????? cout << "worker 2 done" << endl;

???????? return(0);

}

int main(int argc, char *argv[])

{

???????? pthread_mutex_init(&Mutex,NULL);

???????? pthread_mutex_init(&EventMutex,NULL);

???????? pthread_cond_init(&Event,NULL);

???????? cout<<"start thread A & B"<<endl;

???????? pthread_create(&ThreadA,NULL,worker1,NULL);

???????? pthread_create(&ThreadB,NULL,worker2,NULL);

???????? //...

???????? pthread_join(ThreadA,NULL);//wait for threads

???????? pthread_join(ThreadB,NULL);

???????? return(0);

}

實現了FS同步關系。在線程B開始之前線程A不能結束。一旦Number==50,ThreadA就發送信號給ThreadB,接著線程A繼續執行直到結束。在接收到A的信號后,B才開始計算。線程B使用EventMutex與條件變量Event.Mutex來同步共享數據Number的寫訪問。一個任務可以使用幾個互斥鎖來同步不同的臨界區以及不同的事件。

本文使用Blog_Backup未注冊版本導出,請到soft.pt42.com注冊。

轉載于:https://www.cnblogs.com/aquar/archive/2010/11/19/3451395.html

總結

以上是生活随笔為你收集整理的C++ 并行与分布式编程 chapter5 任务间并发的同步(2)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久久精品91 | 一区二区三区四区国产 | 91手机视频在线观看 | 天堂视频中文在线 | 男人日女人的网站 | 能看的黄色网址 | 亚洲久久在线 | 卡通动漫精品一区二区三区 | 国产在线一二三区 | 一本毛片| 鲁大师私人影院在线观看 | 国产正在播放 | 欧美一级在线免费 | 成人黄色免费视频 | 肉嫁高柳家 高清 | 茄子av在线 | av资源共享 | 无码任你躁久久久久久老妇 | 国产精品主播一区二区 | 国产一二三在线观看 | 国语对白做受欧美 | 91视频黄色 | 久久色资源网 | 成年人在线视频 | 亚洲国产成人精品女人 | 国产精品久久久久久亚洲影视 | 亚洲18在线看污www麻豆 | 午夜精品久久久久久久久久蜜桃 | 亚洲欧美精品一区二区三区 | 九九视频免费 | 天天爽天天色 | 午夜影院视频 | 国产精品麻豆视频 | 一级片视频免费 | 禁断介护老人中文字幕 | www欧美| 91系列在线观看 | 人妻精品无码一区二区三区 | 污的网站| 日韩免费在线视频 | 玖玖在线视频 | 免费毛片观看 | 日本成人一区 | 欧美久久久久久 | 青青青免费视频观看在线 | 娇妻玩4p被三个男人伺候电影 | 久久99久久99精品免观看粉嫩 | 波多野结衣高清电影 | 亚洲av毛片一区二二区三三区 | 深爱激情综合网 | 国产高清黄色 | 国产一区二区三区四区在线观看 | av手机天堂 | 国产福利片在线 | 人妻丰满熟妇无码区免费 | 制服丝袜在线视频 | 黄色资源在线播放 | 主人性调教le百合sm | 日韩精品理论 | 美女扒开内裤让男人桶 | 朝桐光av一区二区三区 | 亚洲h网站| 久久久久久久久久久久久久久 | 97人人射 | 中文字幕一区二区在线视频 | 国产情侣激情自拍 | 无码精品黑人一区二区三区 | 天天爽天天做 | 国产麻豆xxxvideo实拍 | 亚洲成人黄色片 | 91操操操 | 黑白配在线观看免费观看 | 亚洲精品免费在线观看 | 黄色综合 | 久色精品视频 | 一二三区中文字幕 | 免费在线一区二区 | 手机在线观看av片 | 亚洲欧美另类图片 | av在线片 | 精品国产成人亚洲午夜福利 | 亚洲综合av一区 | 免费一二三区 | 国产激情一区二区三区 | 国内精品久久久久久久久久久 | 久久亚洲AV成人无码一二三 | 深爱激情站 | 国产又粗又大又硬 | 成人av电影在线观看 | 精品成人久久久 | 三上悠亚中文字幕在线播放 | 日韩免费在线视频 | 亚洲一区二区在线 | wwwxx欧美| 成人三级电影网站 | 国产成人中文字幕 | 日本人妻不卡一区二区三区中文字幕 | 成人动漫在线免费观看 | 一区二区高清视频 |