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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux C++ 多线程编程

發布時間:2024/9/5 linux 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux C++ 多线程编程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
http://blog.chinaunix.net/uid-14880649-id-2954431.html 1.Solaris .vs. Linux Posix 庫
Solaris 庫(lib 線程)Linux POSIX 庫(libp 線程)操作
sema_destroy()sem_destroy()銷毀信號狀態。
sema_init()sem_init()初始化信號。
sema_post()sem_post()增加信號。
sema_wait()sem_wait()阻止信號計數。
sema_trywait()sem_trywait()減少信號計數。
mutex_destroy()pthread_mutex_destroy()銷毀或禁用與互斥對象相關的狀態。
mutex_init()pthread_mutex_init()初始化互斥變量。
mutex_lock()pthread_mutex_lock()鎖定互斥對象和塊,直到互斥對象被釋放。
mutex_unlock()pthread_mutex_unlock()釋放互斥對象。
cond_broadcast()pthread_cond_broadcast()解除對等待條件變量的所有線程的阻塞。
cond_destroy()pthread_cond_destroy()銷毀與條件變量相關的任何狀態。
cond_init()pthread_cond_init()初始化條件變量。
cond_signal()pthread_cond_signal()解除等待條件變量的下一個線程的阻塞。
cond_wait()pthread_cond_wait()阻止條件變量,并在最后釋放它。
rwlock_init()pthread_rwlock_init()初始化讀/寫鎖。
rwlock_destroy()pthread_rwlock_destroy()鎖定讀/寫鎖。
rw_rdlock()pthread_rwlock_rdlock()讀取讀/寫鎖上的鎖。
rw_wrlock()pthread_rwlock_wrlock()寫讀/寫鎖上的鎖。
rw_unlock()pthread_rwlock_unlock()解除讀/寫鎖。
rw_tryrdlock()pthread_rwlock_tryrdlock()讀取非阻塞讀/寫鎖上的鎖。
rw_trywrlock()pthread_rwlock_trywrlock()寫非阻塞讀/寫鎖上的鎖。
  • 如何在linux 下c++中類的成員函數中創建多線程
  • linux系統中線程程序庫是POSIX pthread。POSIX pthread它是一個c的庫,用C語言進行多線程編程我這里就不多說了,網上的例子很多。但是如何在C++的類中實現多線程編程呢?如果套用C語言中創建多線程的方式,在編譯的時候會出現...does?not?match `void*(*)(void*)..這樣的錯誤。出現這種情況的原因是,編譯器在處理C++和C文件上是不同的,也就是說C++和C語言里邊指針函數不等價。解決這種錯誤的方法
  • 有兩種:
  • 1、不要將線程函數定義為類的成員函數,但是在類的成員函數里邊調用它。
  • 例如:
  • [test.h]
  • #ifndef TEST_H
  • #define TEST_H
  • class?test
  • {
  • public:
  • ????test();
  • ????~test();
  • private:
  • ????void createThread();
  • };
  • #endif
  • [test.cpp]
  • test::test()
  • {}
  • test::~test()
  • {}
  • void?*threadFunction()
  • {
  • ????printf("This is a thread");
  • ????for(;;);
  • }
  • void test::createThread()
  • {
  • ????pthread_t threadID;
  • ????pthread_create(&threadID,?NULL,?threadFunction,?NULL);
  • }
  • [main.cpp]
  • #inlcude?"test.h"
  • int?main()
  • {
  • ????test t;
  • ????t.createThead();
  • ????for(;;);
  • ????return 0;
  • }
  • 2、將線程函數作為類的成員函數,那么必須聲明改線程函數為靜態的函數,并且該線程函數所引用的其他成員函數也必須是靜態的,如果要使用類的成員變量,則必須在創建線程的時候通過void?*指針進行傳遞。
  • 例如:
  • 【test.h】
  • #ifndef TEST_H
  • #define TEST_H
  • class?test
  • {
  • public:
  • ????test();
  • ????~test();
  • private:
  • ????int?p;
  • ????static void?*threadFction(void?*arg);
  • ????static void sayHello(int?r);
  • ????void createThread();
  • };
  • #endif
  • [test.cpp]
  • test::test()
  • {}
  • test::~test()
  • {}
  • void?*test::threadFunction(void?*arg)
  • {
  • ????int?m?=?*(int?*)arg;
  • ????sayHello(m);
  • ????for(;;);
  • }
  • void sayHello(int?r)
  • {
  • ????printf("Hello world %d!\n",?r);
  • }
  • void test::createThread()
  • {
  • ????pthread_t threadID;
  • ????pthread_create(&threadID,?NULL,?threadFunction,?NULL);
  • }
  • [main.cpp]
  • #inlcude?"test.h"
  • int?main()
  • {
  • ????test t;
  • ????t.createThead();
  • ????for(;;);
  • ????return 0;
  • }
  • ====================================================================================
  • ?http://bigbossman.blogbus.com/logs/10761605.html

  • ?Linux下的編程一直是C語言的天下,但老是用C感覺寫的很乏味。用面向對象方法編程,聽著都倍有面子。于是決定先在的這個項目用C++來寫。雖然不一定能“以C++的思想”來寫C++,少會有C++的樣子。


  • 但是問題來了:我需要在程序中動態創建一個線程,而pthread不接受C++類的成員函數作為參數。

  • 原因也很簡單,類成員是在類被實例化成為對象后才存在的,即在編譯時是不存在的,編譯器無法取得函數的確切入口地址,自然無法通過編譯。

  • 照這個分析,如果把要調用的類成員函數聲明為靜態的,pthread_create就可以找到函數的地址了。但這樣一來的話,由于類中的靜態函數無法調用類的非靜態成員。線程函數的功能就受到了很大限制,也就沒有比要將其放在類中了。

  • 最容易想到的解決方案就是寫個C函數,然后再C函數中調用C++對象的成員函數。

  • 比如類為

  • class?foo(){

  • ????public?:
  • ????????thread();

  • }

  • class?*f;

  • void?*bar(void?*arg){

  • ????f->thread();?

  • ????return?NULL;
  • }

  • int?main(){

  • ????.........
  • ????f=new foo();
  • ????
  • ????pthread_create(&tid,&tattr,bar,NULL);

  • }

  • 顯然這種發法太笨了,而且對象只能是全局的。

  • 注意到線程函數bar可以有一個任意類型的指針作為參數,那我們何不將對象通過這個指針將對象變為bar的一個參數,從而讓我們的程序好看一些。

  • class?foo(){

  • ????public?:
  • ????????thread();

  • }


  • void?*bar(void?*args){

  • ????foo?*f=(foo?*)args;

  • ????f.thread();?

  • ????return?NULL;
  • }

  • int?main(){

  • ????.........
  • ????foo?*f=new foo();
  • ????pthread_create(&tid,&tattr,bar,f);

  • }

  • 如果把上述兩種方法結合起來即對象中的靜態函數+通過指針參數傳遞對象,那又會怎么樣呢?

  • class?foo(){

  • ????public?:
  • ????????int?thread();

  • ????????static void?*wrapper(void?*args){
  • ????????????foo?*f=static_cast<foo?*>(args);
  • ????????????f->thread();
  • ????????????return?NULL;
  • ????????}

  • }


  • int?main(){

  • ????.........
  • ????foo?*f=new foo();
  • ????pthread_create(&tid,&tattr,foo::wrapper,&f);

  • }

  • ?其他參考網頁

  • ?http://www.ibm.com/developerworks/cn/linux/l-cn-mthreadps/index.html

  • ?http://www.cppblog.com/bigsml/archive/2006/09/07/12137.html
  • 總結

    以上是生活随笔為你收集整理的linux C++ 多线程编程的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 91老师片黄在线观看 | 国产精品第九页 | 免费大片黄在线观看视频网站 | 亚洲69av| 在线免费看a | 色老二导航 | 欧美成人午夜精品久久久 | 国产高清精品在线观看 | 国产美女网站视频 | 国产视频69 | 久久久88 | h在线播放 | 亚洲图片综合区 | 中文字幕无线精品亚洲乱码一区 | 成年人的毛片 | 欧美激情校园春色 | 成品短视频泡芙 | 久久久久国产精 | 国产伦精品一区二区三区免.费 | 午夜高清 | av导航网址 | 97国产高清| 在线看黄网址 | 超碰69| 亚洲天堂女人 | 91精品国产乱码久久久 | 国产乱来 | 国产免费网址 | 狠狠操狠狠插 | 亚洲视频成人 | 美女超碰在线 | 久久人人澡 | 欧美日韩一区二区在线 | 黄色仓库av | 瑟瑟视频免费观看 | 亚洲天堂一二三 | 久久精品国产精品亚洲 | 国产特黄毛片 | 少妇视频网 | 亚洲精品一区二区三区在线观看 | 99只有精品 | 韩国av一区二区三区 | 国产调教在线观看 | 91精品国产综合久久久久久久 | 右手影院亚洲欧美 | 中文字幕18页 | 成人在线h| 日韩一区二区在线播放 | 天天干天天色天天射 | 日韩免费福利 | 日本一区不卡视频 | 一区二区三区欧美 | 精品久久无码中文字幕 | 一卡二卡久久 | 在线国产视频一区 | 在线中文视频 | 国产成人综合网 | 国产一区二区三区在线视频 | 中文资源在线观看 | 羞羞影院体验区 | 蜜臀av免费一区二区三区水牛 | 七月色 | 91久久久国产精品 | 欧美一区二区高清 | 中文字幕在线播放日韩 | 国产在线视频卡一卡二 | 久久久久久久久久久久久久久久久久久 | 第一区免费在线观看 | 成人一区二区视频 | 97超碰网 | 哺乳期给上司喂奶hd | 成年性生交大片免费看 | 国产免费的av | 美女国产精品 | 日韩欧美国产另类 | av亚洲在线观看 | 超碰在线观看免费版 | 欧美日韩a v | 成人mv| 韩国一区二区三区视频 | 国产精品成人69xxx免费视频 | 欧美日韩高清一区 | 久久久久久久久久久久久久久久久久久 | 日韩在线视频在线观看 | 亚洲综合小说 | 欧美日韩 一区二区三区 | 中文字幕日韩精品亚洲一区小树林 | 露脸啪啪清纯大学生美女 | 日本一区高清 | 亚洲蜜桃在线 | 黄色一及片| 中文字幕免费在线观看视频 | www.蜜臀 | 欧美性受xxxx黑人猛交88 | www.色综合 | 欧美日韩亚洲在线 | 免费不卡的av| 办公室摸腿吻胸激情视频 | 特黄1级潘金莲 |