多執行緒程式設計

2021-09-01 07:45:04 字數 2151 閱讀 9136

題目:子執行緒迴圈 10 次,接著主線程迴圈 100 次,接著又回到子執行緒迴圈 10 次,接著再回到主線程又迴圈 100 次,如此迴圈50次,試寫出**

子執行緒與主線程必有乙個滿足條件(flag == num),不滿足條件的那個執行緒不可能獲取unique_lock(會在wait中釋放),只有滿足條件的執行緒才能獲取鎖,執行程式

mutex m;//保護條件的互斥訪問

condition_variable cond;//條件變數

int flag = 10;//條件

void fun(int num)

}void main()

題目(google筆試題):有四個執行緒1、2、3、4。執行緒1的功能就是輸出1,執行緒2的功能就是輸出2,以此類推.........現在有四個檔案abcd。初始都為空。現要讓四個檔案呈如下格式:

a:1 2 3 4 1 2....

b:2 3 4 1 2 3....

c:3 4 1 2 3 4....

d:4 1 2 3 4 1....

mutex m;

condition_variable cond;

int loop = 10;

int flag;

void func(int num)

}void main(int argc,char *argv)

讀者寫者問題

這也是乙個非常經典的多執行緒題目,題目大意如下:有乙個寫者很多讀者,多個讀者可以同時讀檔案,但寫者在寫檔案時不允許有讀者在讀檔案,同樣有讀者讀時寫者也不能寫。

class rwlock 

void write_lock()

void unlock()

else

}rwlock() :_writer(0), _reader(0), _active(0)

};void t1(rwlock* rwl)

}void t2(rwlock* rwl)

}void t3(rwlock* rwl)

}int main()

執行緒安全的queue

stl中的queue是非執行緒安全的,乙個組合操作:front(); pop()先讀取隊首元素然後刪除隊首元素,若是有多個執行緒執行這個組合操作的話,可能會發生執行序列交替執行,導致一些意想不到的行為。因此需要重新設計執行緒安全的queue的介面。

templateclass threadsafe_queue

threadsafe_queue(threadsafe_queue const& other)

void push(t new_value)//入隊操作

void wait_and_pop(t& value)//直到有元素可以刪除為止

);value = data_queue.front();

data_queue.pop();

}std::shared_ptrwait_and_pop()

);std::shared_ptrres(std::make_shared(data_queue.front()));

data_queue.pop();

return res;

}bool try_pop(t& value)//不管有沒有隊首元素直接返回

std::shared_ptrtry_pop()

bool empty() const

};

題目:編寫程式完成如下功能:

1)有一int型全域性變數g_flag初始值為0

2) 在主線稱中起動執行緒1,列印「this is thread1」,並將g_flag設定為1

3) 在主線稱中啟動執行緒2,列印「this is thread2」,並將g_flag設定為2

5) 主線程在檢測到g_flag從1變為2,或者從2變為1的時候退出

atomicflag(0);

void worker1(futurefut)

void worker2(promiseprom)

//利用promise future來控制線程退出的次序

int main()

多執行緒程式設計

1 多執行緒的基本思路不是在介面執行緒執行費時的 而是專門啟動乙個執行緒 稱作工作執行緒 來完成,介面執行緒只負責介面的 顯示 和操作,而工作執行緒只負責耗時的操作過程。2 對於普通的win32應用程式來說,執行緒可以分為兩種 介面 ui user inte ce 執行緒和工作執行緒。介面執行緒一般...

多執行緒程式設計

如何編寫執行緒安全的dll 在我的工作中經常會編寫dll,這些dll有個共同的特點就是都有乙個初始化函式,乙個資源釋放函式,其他幾個函式都是核心功能函式。而且這些dll有時會被多個程序同時呼叫,這就牽扯到多程序的多執行緒呼叫dll的問題。有點繞口,以下我根據我實踐中遇到的問題,分四種情況分享一下我解...

多執行緒程式設計

1 執行緒的狀態 建立狀態 準備好了乙個多執行緒的物件 就緒狀態 呼叫了start 方法,等待cpu進行排程 執行狀態 執行run 方法 阻塞狀態 暫時停止執行,可能將資源交給其他執行緒使用 終止狀態 死亡狀態 執行緒銷毀 2 執行緒的常用方法 thread類 取得執行緒名稱 getname thr...