C++的并发世界(六)——互斥解决数据共享冲突

0.数据共享的问题

在多个线程中共享数据时。需要注意线程安全问题。如果多个线程同时访问同一个变量。并且其中至少有一个线程对该变量进行了写操作。那么就会出现数据竞争问题。数据竞争可能会导致程序崩溃,产生来定义的结果,或者得到错误的热果。为了避免数据竞争问题。需要使用同步机制来确保多个线程之间对共享数据的访同是安全的。常见的同步机制包括互厍量。条件变量,原子授作等。

1. 预期示例

#include <iostream>
#include <thread>

int a = 3;
void func()
{
	std::cout << "begin:" << a << std::endl;
	a++;
	std::cout << "end:" << a << std::endl;
}

int main()
{
	for (int i = 0; i < 10; i++)
	{
		std::thread th(func);
		th.join();
	}
	getchar();
	return 0;
}

在这里插入图片描述

2.目标示例

#include <iostream>
#include <thread>
#include <mutex>

int a = 3;
std::mutex mutex;

void func()
{
	mutex.lock();
	std::cout << "begin:" << a << std::endl;
	a++;
	std::cout << "end:" << a << std::endl;
	mutex.unlock();
}

int main()
{
	for (int i = 0; i < 10; i++)
	{
		std::thread th(func);
		th.detach();
	}
	getchar();
	return 0;
}

相关推荐

  1. C++ 并发编程 | 并发世界

    2024-04-04 18:54:01       64 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-04 18:54:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-04 18:54:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-04 18:54:01       87 阅读
  4. Python语言-面向对象

    2024-04-04 18:54:01       96 阅读

热门阅读

  1. 4.3学习计划

    2024-04-04 18:54:01       38 阅读
  2. 34-1 SSRF漏洞 - SSRF服务端请求伪造

    2024-04-04 18:54:01       39 阅读
  3. Node.js 的常用命令

    2024-04-04 18:54:01       36 阅读
  4. 第十一届“图灵杯“NEUQ-ACM程序设计竞赛

    2024-04-04 18:54:01       37 阅读
  5. vue监听键盘回车事件的三种方法

    2024-04-04 18:54:01       37 阅读
  6. Spring Bean 的一生

    2024-04-04 18:54:01       34 阅读
  7. AI与程序员:合作开发让创新更有可能

    2024-04-04 18:54:01       37 阅读
  8. ORCLE函数学习方法

    2024-04-04 18:54:01       34 阅读