題目:子執行緒迴圈 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...