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