多執行緒程式設計2

2021-10-09 09:42:05 字數 2749 閱讀 6046

#include

#include

using

namespace std;

//定義函式,可呼叫的物件。作為執行緒引數的入口

void

myprint

(const

int&i,

char

*pmybuf)

}int

main()

#include

#include

using

namespace std;

void

myprint2

(const

int&i,

const string &pmybuf)

intmain()

class

a//型別轉換建構函式,將整型a轉換為類a的物件m_i; 將傳入的i的值賦給m_i。 &i = 0x62fde8, *&i = 10a(

a//型別轉換建構函式,將整型a轉換為類a的物件m_i; 將傳入的i的值賦給m_i。 &i = 0x62fde8, *&i = 10a(

則會多進行一次拷貝構造

class

a//型別轉換建構函式,將整型a轉換為類a的物件m_i; 將傳入的i的值賦給m_i。 &i = 0x62fde8, *&i = 10a(

const a &a)

:m_i

(a.m_i)~a

()};

class

a//型別轉換建構函式,將整型a轉換為類a的物件m_i; 將傳入的i的值賦給m_i。 &i = 0x62fde8, *&i = 10a(

//在主線程中構建智慧型指標

//使用std::move()將智慧型指標傳入執行緒函式的形參,使得子執行緒的智慧型指標形參和主線程的智慧型指標指向同一位址

unique_ptr<

int> mya (

newint(2

)); thread mythread4

(myprint5, std::

move

(mya));

//使用智慧型指標作為引數

void

myprint5

(unique_ptr<

int> a)

//在類a中定義成員函式void thread_work

void

thread_work

(int n)

//在主線程中

a myobj(10

);thread mytobj

(&a::thread_work, myobj,5)

;//第乙個引數為類a的成員函式的位址作為執行緒的入口,第二個引數為類a的物件,第三個引數為執行緒入口成員函式的形參

首先執行 a myobj(10);構造乙個類a物件

在主線程中執行拷貝建構函式,對myobj進行拷貝構造,所以即使使用detach()也不會出問題

在主線程中進行拷貝,在子執行緒中進行析構

多執行緒程式設計2

訊號量同步 include include include include include 訊號量函式定義 include void thread fun void arg sem t bin sem define worksize 1024 char workarea worksize int m...

多執行緒程式設計2 執行緒同步

訊號量 訊號量通常有兩種 二進位制訊號量和計數訊號量。二進位制訊號量只有0和1兩種取值,計數訊號量有更大的取值範圍。訊號量一般用來保護一段 使其每次只能被乙個執行執行緒執行,要完成這個工作,可以使用二進位制訊號量。有時,希望可以允許有限數目的執行緒執行一段指定的 這時可以使用計數訊號量。建立 inc...

多執行緒程式設計雜說2

多執行緒程式設計普及出現在90年以後,之前只有多核的cpu伺服器才有這樣的需要。多執行緒以其複雜化脆弱性著稱,程式設計師大多避而不談或只是簡單的應用。執行緒保護的互斥鎖被認為是導致延遲和效能下降的主因。這主要有兩方面的原因,第一大部分應用只需要乙個執行緒進行處理有著強烈的排他性和連貫性,第二很少有使...