温馨提示×

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

c++
小樊
82
2024-10-09 19:23:15
栏目: 编程语言

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

0