21xrx.com
2024-11-10 00:10:25 Sunday
登录
文章检索 我的文章 写文章
C++多线程中如何同步修改全局变量
2023-07-04 19:29:35 深夜i     --     --
C++ 多线程 同步 修改 全局变量

在 C++ 多线程编程中,全局变量的修改是一项重要的任务,但是多个线程对于同一个全局变量的读写可能会引起竞争条件,进而导致数据不一致等问题。因此,在编写 C++ 多线程程序时,需要采取一些措施来同步多个线程对于全局变量的修改。

一种简单而有效的方法是使用互斥锁(Mutex)。互斥锁是一种同步机制,它可以确保在任何时候只有一个线程可以访问被保护的共享资源。使用互斥锁,多个线程可以竞争得到访问权限,当其中一个线程持有锁时,其他线程必须等待锁被释放后才能继续执行。

在 C++ 中,互斥锁可以通过标准库中的 mutex 类来实现。使用 mutex,可以对临界代码段进行加锁和解锁操作,保证多个线程同时访问全局变量时不会出现冲突。

下面是一个使用 mutex 来同步修改全局变量的简单示例代码:


#include <iostream>

#include <thread>

#include <mutex>

std::mutex mtx;

int global_var = 0;

void thread_func() {

  for (int i = 0; i < 100000; i++) {

    mtx.lock();

    global_var++;

    mtx.unlock();

  }

}

int main() {

  std::thread t1(thread_func);

  std::thread t2(thread_func);

  t1.join();

  t2.join();

  std::cout << "Global variable value is: " << global_var << std::endl;

  return 0;

}

在上面的代码中,我们定义了一个全局变量 global_var,并在多个线程中对它进行修改。在 thread_func 函数中,我们使用 mutex 对 global_var 进行加锁和解锁操作,确保同时只有一个线程可以修改 global_var 的值。

在主函数中,我们创建两个线程 t1 和 t2,并分别调用 thread_func 函数。在两个线程执行完成后,我们输出 global_var 的值,可以发现其值为 200000,表明两个线程对 global_var 的修改是同步进行的。

总之,使用互斥锁是一种简单而有效的方法来同步多个线程对于全局变量的修改。在编写 C++ 多线程程序时,我们应该仔细思考如何避免竞争条件,选择合适的同步机制来确保多个线程之间的数据访问安全。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复