【線程】屏障

一、主要函數應用

1. 函數原型:初始化和回收

int pthread_barrier_init(pthread *barrier, const pthread_barrier_t *attr, unsigned int count);
int pthread_barrier_destroy(pthread_barrier_t *barrier);

分析:

  • 初始化屏障時,可以使用count參數指定,在允許所有線程運行之前,必須到達屏障的線程數目。?

?

2.?函數原型

#include <pthread.h>
int pthread_barrier_wait(pthread_barrier_t *barrier);

分析:

  • 每一個線程調用等待函數,barrier 計數都會加 1,直到計數值等于初始化函數中的參數 count。當最后一個線程讓 barrier 計數值達到了 count,所有等待的線程都會被喚醒。
  • 所有線程中,只有一個線程會讓 pthread_barrier_wait 返回?PTHREAD_BARRIER_SERIAL_THREAD,而其它線程調用此函數會返回 0.

?

1. 測試代碼

【題目】程序 barrier 一共有 11 個線程,包含主線程。所有線程會先打印一遍 “hello, I’m thread xx” 然后調用 pthread_barrier_wait 等待,直到 barrier 計數達到了 11 才返回。一旦返回了,就會打印 thread xx returning xx.

#include <unistd.h>
#include <stdio.h>
#include <pthread.h>pthread_barrier_t b;void* th_fn(void *arg) 
{int id = (int)arg;int res = 0;printf("hello, I'm thread [%d]\n", id);res = pthread_barrier_wait(&b);printf("thread [%d] returning [%d]\n", id, res);return NULL;
}int main() 
{int i, res = 0;pthread_t tid[10];printf("PTHREAD_BARRIER_SERIAL_THREAD = %d\n", PTHREAD_BARRIER_SERIAL_THREAD);pthread_barrier_init(&b, NULL, 11);for (i = 0; i < 10; ++i) {pthread_create(&tid[i], NULL, th_fn, (void*)i);}res = pthread_barrier_wait(&b);printf("thread [main] returning [%d]\n", res);for (i = 0; i < 10; ++i) {pthread_join(tid[i], NULL);}pthread_barrier_destroy(&b);return 0;
}

輸出結果:

?

參考資料

1. 88-屏障 barrier

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/385536.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/385536.shtml
英文地址,請注明出處:http://en.pswp.cn/news/385536.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

中高級工程師Java開發!java生成隨機數代碼包

微服務是什么 微服務起源于2005年Peter Rodgers博士在云端運算博覽會提出的微Web服務(Micro-Web-Service)&#xff0c;根本思想類似于Unix的管道設計理念。2014年&#xff0c;由Martin Fowler 與 James Lewis共同提出了微服務的概念&#xff0c;定義了微服務架構風格是一種通過…

Java軟件開發面試題!hr和技術經理一起面

springspring5最全知識梳理大綱&#xff08;總&#xff09; spring最全知識梳理大綱&#xff08;總&#xff09; spring5最全知識梳理大綱&#xff08;總&#xff09; spring最全知識梳理大綱&#xff08;分&#xff09; 為什么要使用Spring&#xff1f; Bean spring事務 面向…

XSI IPC

一、查詢IPC的命令 顯示&#xff1a; ipcs -a 顯示所有共享內核對象 ipcs -m 顯示共享內存 m memory ipcs -q 消息隊列 q queue ipcs -s 顯示信號量 s semphore刪除&#xff1a; ipcrm -m ID 刪除共享內存 ipcrm -q ID 刪除共享隊列 ipcrm -s ID 刪除信號量 二…

Java進階之光!javaunicode碼轉字符

01 如何理解高并發&#xff1f; 高并發意味著大流量&#xff0c;需要運用技術手段抵抗流量的沖擊&#xff0c;這些手段好比操作流量&#xff0c;能讓流量更平穩地被系統所處理&#xff0c;帶給用戶更好的體驗。 我們常見的高并發場景有&#xff1a;淘寶的雙11、春運時的搶票、…

Java進階之光!java字符串類型轉換為int

阿里巴巴篇 1.扎實的計算機專業基礎&#xff0c;包括算法和數據結構&#xff0c;操作系統&#xff0c;計算機網絡&#xff0c;計算機體系結構&#xff0c;數據庫等2.具有扎實的Java編程基礎&#xff0c;理解IO、多線程等基礎框架3.熟練使用Linux系統的常用命令及shell有一定了…

Java進階之光!mysql創建用戶并授權建表

正文 MyBatis 的整體架構分為三層&#xff0c; 分別是基礎支持層、核心處理層和接口層&#xff0c;如下圖所示。 基礎支持層 反射模塊 該模塊對 Java 原生的反射進行了良好的封裝&#xff0c;提供了更加簡潔易用的 API &#xff0c;方便上層使調用&#xff0c;并且對反射操作…

System V 信號量

一、System V 信號量 1.信號量linux命令 顯示&#xff1a; ipcs -a 顯示所有共享內核對象 ipcs -s 顯示信號量 s semphore刪除&#xff1a; ipcrm -s ID 刪除信號量 二、主要函數應用 1. 函數原型&#xff1a; #include <sys/sem.h> int semget(key_t key, int …

Java進階之光!mysql安裝包安裝教程

我聽到的一些發聲 你們賺的錢已經可以了&#xff1a; 我一個發小是做土木工程的&#xff0c;上海大學博士&#xff0c;參與很多著名建筑的工程&#xff0c;但是從薪資上看&#xff0c;還不如一些稍微像樣的公司的6年多的高級開發。為什么&#xff1f;這就是行業的紅利&#xf…

Java進階學習資料!dockerjar內存

準備好套路 **①自我介紹&#xff1a;**千萬不能筐瓢&#xff0c;一定要牢記&#xff0c;自然流暢地介紹自己的學習經歷、工作經歷、項目經歷、個人優勢等等&#xff1b; **②抽象概念&#xff1a;**當面試官問你是如何理解多線程的時候&#xff0c;你要知道從定義、來源、實…

管道(二)

無名管道 測試代碼&#xff1a; #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <fcntl.h> #include <string.h>#define ERR_EXIT(m) do { perror(m); exit(EXIT_FAILURE); }while(0) #define TEST_SIZE 68*1024int mai…

Java進階:java字符串定位語句

正文 模塊&#xff08;Module&#xff09;、組件&#xff08;Component&#xff09;、包&#xff08;Package&#xff09;&#xff0c;這些概念對于我們技術同學并不陌生&#xff0c;但并不是所有人都能理解其要義。 深入理解之后&#xff0c;我才發現&#xff0c;其背后的深…

有名管道

一、有名管道 1. 為何提出有名管道的說法&#xff0c;目的是為了克服無名管道的不足之處&#xff1a; 無名管道只能是用于具有親緣關系的進程之間&#xff0c;這就限制了無名管道的使用范圍。有名管道可以使互不相關的兩個進程互相通信&#xff0c;有名管道可以通過路徑名來指…

Java進階:mysql的事務隔離級別面試題

一面&#xff1a; 阿里巴巴面試答案文末可以領取&#xff01; 1. 觸發新生代GC&#xff0c;如果存活對象總量大于survivor區容量&#xff0c;咋辦 2. 如果任務很多&#xff0c;線程池的阻塞隊列會撐爆內存的哪個區域 3. 棧在堆上嗎 4. GC root有哪些 5. 實例變量可以是GC…

有名管道(二)

一、從FIFO中讀取數據&#xff1a; 約定&#xff1a;如果一個進程為了從FIFO中讀取數據而以阻塞的方式打開FIFO&#xff0c;則稱內核為該進程的讀操作設置了阻塞標志。 如果有進程為寫而打開FIIF&#xff08;寫端存在&#xff09;&#xff0c;且當前FIFO內沒有數據&#xff0…

Java面試2021,java數據可視化項目

AOP簡介 AOP (Aspect Oriented Programing) 稱為&#xff1a;面向切面編程&#xff0c;它是一種編程思想。AOP 是 OOP&#xff08;面向對象編程 Object Oriented Programming)的思想延續 AOP采取橫向抽取機制&#xff0c;取代了傳統縱向繼承體系重復性代碼的編寫方式&#xff0…

gcc的使用

一、gcc編譯過程示意圖 分析&#xff1a; hello程序是一個高級&#xff23;語言程序&#xff0c;這種形式容易被人讀懂。為了在系統上運行hello.c程序&#xff0c;每條&#xff23;語句都必須轉化為低級機器指令。然后將這些指令打包成可執行目標文件格式&#xff0c;并以二進…

Java面試2021,java黑馬百度云

線程是否要鎖住同步資源 鎖住 悲觀鎖不鎖住 樂觀鎖 鎖住同步資源失敗 線程是否要阻塞 阻塞不阻塞自旋鎖&#xff0c;適應性自旋鎖 多個線程競爭同步資源的流程細節有沒有區別 不鎖住資源&#xff0c;多個線程只有一個能修改資源成功&#xff0c;其它線程會重試無鎖同一個線…

gdb使用

[sunbinlocalhost ~]$ gcc -Wall -g simple.c -o simple [sunbinlocalhost ~]$ ./simple Entering main ... result[1-100] 5050 result[1-10] 55 Exiting main ... [sunbinlocalhost ~]$ gdb simple 啟動gdb GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-110.el7 Copyrigh…

oppoJava面試題,java聲明全局變量的關鍵字

螞蟻一面 ??就做了?道算法題&#xff0c;要求兩?時內完成&#xff0c;給了?度為N的有重復元素的數組&#xff0c;要求輸出第10?的數。典型的TopK問題&#xff0c;快排算法搞定。算法題要注意的是合法性校驗、邊界條件以及異常的處理。另外&#xff0c;如果要寫測試?例&…

System V 消息隊列

一、System V 消息隊列 有一個隊列&#xff0c;隊列存放各種消息。每個進程可以把數據封存在消息中&#xff0c;再放入隊列。每個進程都可以拿到消息隊列&#xff0c;再從中取出/放入消息。 消息隊列也有管道一樣的不足&#xff0c;就是每個消息的最大長度是有上限的&#xf…