在多线程中访问vector

本文探讨了在多线程环境中访问C++的vector容器时的两种情况:1. 当不改变vector元素数量时,多线程访问可以并发进行;2. 如果涉及元素数量的变化如push_back或erase,访问会有冲突,需要采取同步措施如加锁来确保线程安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

两种情况:

1. 不改变vector的元素数量, 则多线程访问无冲突。

2. 改变vector的元素数量(比如push_back, erase), 则多线程访问有冲突,需要加锁。

 


#include <iostream>  
#include <windows.h>  
#include <vector>  
#include <string> 
#include <mutex> 
using namespace std;

#pragma comment( lib,"winmm.lib" )

struct A
{
	int a;
	string b;
};

vector<A*>  vecA;
std::mutex m;
int N = 0;

//#define   TEST_READ_WRITE
#define   TEST_PUSH_DELETE

 

DWORD WINAPI ThreadFun1(LPVOID pParam)
{   


#ifdef  TEST_READ_WRITE
	
	while (1)
	{
		for (vector<A*>::const_iterator it = vecA.begin(); it != vecA.end(); ++it)
		{
			(*it)->a =  rand() % 10;
		}
	}
#endif  


#ifdef  TEST_PUSH_DELETE
	DWORD  lastTime = timeGetTime();
	//更改vector中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员乐逍遥

如果你觉得帮助了你,支持一下!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值