作者su27 (su27)
看板C_and_CPP
标题[问题] 多线程及静态变数的问题
时间Wed May 11 12:03:01 2022
开发平台(Platform): (Ex: Win10, Linux, ...)
win10
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
qt
全局静态变数
static vector<Class_A> Class_A_List;
static int fun1()
{
//使用到Class_A_List
}
static int fun2()
{
//使用到Class_A_List
}
我在程式中使用了多线程
每个线程在启动时会创建
Class_A Obj; //会有很多个
并且加入到全局静态变数内
Class_A_List.push_back(Obj);
并使用静态函数
fun1();
fun2();
PS:线程各自有Obj
只是全部储存在Class_A_List
调用fun1()及fun2得去Class_A_List找出Obj
去读写Obj
我目前使用线程一个执行完再接一个不会出错
第一个线程还没结束 就启动第二个线程
程式就会终止
问题
请问一下
1.多线程能同时使用同一个静态函数吗?
2.多线程能同时使用同一个全局静态变数 如上面的Class_A_List?
即便它们是各自读取修改各自的Obj
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 125.228.53.160 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1652241784.A.B00.html
※ 编辑: su27 (125.228.53.160 台湾), 05/11/2022 12:04:22
1F:→ nh60211as: 加入元素後的大小如果超过 capacity 会 reallocate05/11 12:15
2F:→ nh60211as: 等一下 vector 哪来的 add05/11 12:16
写错了
3F:→ colako: 我觉得你好像是想要一个 thread_local 的东西?05/11 12:38
※ 编辑: su27 (125.228.53.160 台湾), 05/11/2022 12:43:01
4F:推 layan: mutex 05/11 13:13
5F:→ Lipraxde: Critical section 要加 lock 保护 05/11 13:25
6F:→ Lipraxde: 如果各个 thread 只使用各自的 data 的话,比起用 thre 05/11 13:29
7F:→ Lipraxde: ad_local 会更建议是弄个各自的 context 去管理,因为 05/11 13:29
8F:→ Lipraxde: thread_local 在某些使用情境下会有 performance 问题 05/11 13:29
9F:→ su27: 加入thread_local就能正常运行,谢谢 05/11 22:38
10F:推 LPH66: 是说, 用了 thread_local 就不需要你自己用个容器装了 05/12 00:49
11F:→ LPH66: 写一个 thread_local Class_A Obj; 就会是各 thread 各自有 05/12 00:49
12F:→ LPH66: 不过看你要这样装可能你的 Class_A 物件有某些程度的共用 05/12 00:55
13F:→ LPH66: 这样的话 thread_local 或许不一定会是你真正需要的解 05/12 00:55
14F:→ LPH66: 建议照 Lipraxde 提的检视一下你执行绪资料的使用方式 05/12 00:56
15F:→ LPH66: 有些时候执行绪需要的资料直接开在执行绪函数里会更好管理 05/12 01:00
16F:→ hichcock: 你的问题简化就是...变数操作是不是 "不可分割" 的 05/13 11:25
17F:→ hichcock: 如果不是....就要自己去保护他 05/13 11:25
18F:推 wulouise: 先解释为什麽你要放进global的地方用.. 05/14 09:38
19F:→ wulouise: 如果任意thread要r/w任意obj 那就自己保护好 05/14 09:39
20F:推 OnlyRD: 这跟全局静态变数无关吧?主要是多线程启动後「同 05/15 20:15
21F:→ OnlyRD: 时」去初始化共 05/15 20:15
22F:→ OnlyRD: 用的资料,没有thread once、mutex、task control 05/15 20:15
23F:→ OnlyRD: 或者lockfree 05/15 20:15
24F:→ OnlyRD: 资料结构怎麽可能不挂? 05/15 20:15