C++11之call_once

多個(gè)線程同時(shí)調(diào)用某個(gè)函數(shù),std::call_once可以保證多線程對(duì)該函數(shù)只調(diào)用一次

#include <iostream>
#include <thread>
#include <mutex>
#include <unistd.h>

std::once_flag flag;

void func() {
    std::call_once(flag, [](){
        std::cout << "hello world" << std::endl;
        sleep(1);
    });
}

int main() {
    std::thread t1(func);
    std::thread t2(func);
    std::thread t3(func);

    t1.join();
    t2.join();
    t3.join();
}

pthread_once實(shí)現(xiàn)

#include <iostream>
#include <pthread.h>
#include <unistd.h>

pthread_once_t once = PTHREAD_ONCE_INIT;

void print() {
    std::cout << "hello world" << std::endl;
    sleep(1);
}

void* func(void*) {
    pthread_once(&once, print);
}

int main() {
    pthread_t tid1, tid2, tid3;
    pthread_create(&tid1, NULL, func, NULL);
    pthread_create(&tid2, NULL, func, NULL);
    pthread_create(&tid3, NULL, func, NULL);

    pthread_join(tid1, NULL);
    pthread_join(tid2, NULL);
    pthread_join(tid3, NULL);
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • std::function 將可調(diào)用的函數(shù)或者函數(shù)指針等,封裝成類使用 std::bind 注意其參數(shù)是拷貝的方式...
    愛吃花栗鼠的貓閱讀 791評(píng)論 0 1
  • 接著上上節(jié) thread ,本節(jié)主要介紹mutex的內(nèi)容,練習(xí)代碼地址。<mutex>:該頭文件主要聲明了與互斥量...
    jorion閱讀 12,697評(píng)論 2 4
  • 本文根據(jù)眾多互聯(lián)網(wǎng)博客內(nèi)容整理后形成,引用內(nèi)容的版權(quán)歸原始作者所有,僅限于學(xué)習(xí)研究使用,不得用于任何商業(yè)用途。 互...
    深紅的眼眸閱讀 1,234評(píng)論 0 0
  • 最近是恰好寫了一些c++11多線程有關(guān)的東西,就寫一下筆記留著以后自己忘記回來看吧,也不是專門寫給讀者看的,我就想...
    編程小世界閱讀 2,755評(píng)論 1 2
  • C++11在提供了常規(guī)mutex的基礎(chǔ)上,還提供了一些易用性的類,本節(jié)我們將一起看一下這些類。 1. lock_g...
    許了閱讀 7,831評(píng)論 2 4

友情鏈接更多精彩內(nèi)容