递归火山软件开发平台

标题: 多线程读写同一变量数组的不同成员的问题 [打印本页]

作者: hs999xl    时间: 2023-9-12 08:26
标题: 多线程读写同一变量数组的不同成员的问题
有一个变量数组,它有两个成员。
有二条线程,方法A与方法B。

方法A:频繁读写变量[0]的值
方法B:频繁读写变量[1]的值

请问这样写程序可以吗?(没加锁)

作者: kamikaze    时间: 2023-9-12 09:12
线程里就最好不要写。。。你说行不行。。。
作者: hs999xl    时间: 2023-9-12 09:38
kamikaze 发表于 2023-9-12 09:12
线程里就最好不要写。。。你说行不行。。。

线程里不要有赋值操作是吗?
作者: b0y    时间: 2023-9-12 09:56
如果就是读  数组不会变 就不需要加锁

如果有其他线程会写数组 就要加锁
作者: alexqj    时间: 2023-9-12 10:33
方法A和B各自操作单独的变量,看起来是不会冲突
作者: hs999xl    时间: 2023-9-12 11:36
alexqj 发表于 2023-9-12 10:33
方法A和B各自操作单独的变量,看起来是不会冲突

一个变量数组的不同成员,是不是属于一个变量?
作者: kamikaze    时间: 2023-9-12 11:38
b0y 发表于 2023-9-12 09:56
如果就是读  数组不会变 就不需要加锁

如果有其他线程会写数组 就要加锁 ...

读不需要加锁
作者: hs999xl    时间: 2023-9-12 11:39
比如2条线程记录运行次数:
方法A运行完一遍就 变量[0]=变量[0]+1
方法B运行完一遍就 变量[1]=变量[1]+1
这样不加锁可以吗?

作者: alexqj    时间: 2023-9-12 16:15
hs999xl 发表于 2023-9-12 11:39
比如2条线程记录运行次数:
方法A运行完一遍就 变量[0]=变量[0]+1
方法B运行完一遍就 变量[1]=变量[1]+1

你测一下呢,内存里面是保存在不同地址的,理论上是属于不同变量
作者: b0y    时间: 2023-9-12 16:44
hs999xl 发表于 2023-9-12 11:39
比如2条线程记录运行次数:
方法A运行完一遍就 变量[0]=变量[0]+1
方法B运行完一遍就 变量[1]=变量[1]+1

这样是要加锁的
作者: 呵呵仙8    时间: 2023-9-12 17:08
一条线程操作一个数组成员的读与写应该是可以的,前提是这个成员要是一个存放堆栈的指针.所以.也就等于独一无二的变量了,易语言的是这样的.火山的数组类,搞不清是堆栈的指针.还是什么的!!反正,火山除开8字节以下的变量外语能调用.其它基本无望能被调用.
作者: 一曲    时间: 2023-9-12 22:02
保证在同一时刻或有且或只有一条线程即可
作者: Xelloss0618    时间: 2023-9-12 22:18
基本数据这样没问题,不是火山的数组类就可以了
作者: 纳百川    时间: 2024-2-22 03:36
一个方法只运行一条线程,变量操作代码也没其它线程与它竞争,加什么锁.
如果2个方法都会修改同一全局变量,即使你加了锁也会有竞争错乱此变量的,因为你加不加锁也只有自己一条线程.别一线程在别一方法里也会改变此变量.
作者: li327065266kun    时间: 2024-2-22 10:35
光读或者光写没啥问题,要是频繁读写那就加锁




欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4