C++怎样利用_beginthreadex实现线程同步

avatar
作者
猴君
阅读量:0

在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对象对互斥对象进行加锁,并在修改完成后解锁。这样可以确保同一时间只有一个线程能够访问共享资源,从而实现线程同步。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!