在C++中,使用_beginthreadex函數創建一個新線程,并通過使用互斥對象(mutex)來實現線程同步。互斥對象可以確保多個線程不會同時訪問共享資源,從而避免數據競爭和不一致問題。
下面是一個簡單的示例,展示了如何使用_beginthreadex和互斥對象實現線程同步:
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx; // 全局互斥對象
int shared_data = 0; // 共享資源
void thread_function() {
for (int i = 0; i < 100000; ++i) {
std::unique_lock<std::mutex> lock(mtx); // 加鎖
++shared_data; // 修改共享資源
lock.unlock(); // 解鎖
}
}
int main() {
const int num_threads = 4;
std::thread threads[num_threads];
// 創建多個線程
for (int i = 0; i < num_threads; ++i) {
threads[i] = std::thread(thread_function);
}
// 等待所有線程完成
for (auto& t : threads) {
t.join();
}
std::cout << "Shared data: " << shared_data << std::endl; // 輸出共享資源的值
return 0;
}
在上面的示例中,我們創建了一個全局互斥對象mtx
和一個共享資源shared_data
。然后,我們定義了一個線程函數thread_function
,該函數使用互斥對象來保護對共享資源的訪問。在main
函數中,我們創建了多個線程,并等待它們完成。最后,我們輸出共享資源的值,以驗證所有線程都已成功修改了它。
請注意,在上面的示例中,我們在修改共享資源之前使用std::unique_lock
對象對互斥對象進行加鎖,并在修改完成后解鎖。這樣可以確保同一時間只有一個線程能夠訪問共享資源,從而實現線程同步。