全局都能访问的数组,如果2个线程同时对它的不同成员进行更新,是否会锁死?

中文命名法 2018-04-19 03:40:50
struct 结构
{
...
}

结构[] 结构数组 = new 结构[10];
结构数组[0] = 乱七八糟;
结构数组[5] = 七上八下;
假如代码里的第2行和第3行是在2个线程里同时进行的,是否会产生其中1个成员没被赋值的情况?
我本地模拟不出,请教大家。
...全文
416 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xian_wwq 2018-04-19
  • 打赏
  • 举报
回复
什么都没有lock,怎么会锁死? 顶多是会出现“脏”数据而已 如果线程的执行代码是可重入的,那就无所谓
正怒月神 2018-04-19
  • 打赏
  • 举报
回复
引用 4 楼 shawb 的回复:
这样还会产生线程不安全吗?
你这样,的确不会影响。 因为你只是更新,而且还是更新不同的。 但是数组这个东西就不是线程安全的。 你要先去了解不是线程安全的意思。 最简单的是,一个线程在查询 自定义结构(1);的时候,另一个线程可能删除了自定义结构(1); 这就报错了。
中文命名法 2018-04-19
  • 打赏
  • 举报
回复
引用 3 楼 hanjun0612 的回复:
是啊,因为数组不是线程安全的啊。
struct 结构成员
{
    ...
}

struct 自定义结构
{
    public static 结构成员[] 结构数组 = new 结构成员[10];
    public static void 更新(Byte 角标, Object 值)
    {
        结构数组[角标] = 值;
    }
}
//不同线程同时执行下面的方法:
自定义结构.更新(0, 对象);
自定义结构.更新(3, 对象);
这样还会产生线程不安全吗?
正怒月神 2018-04-19
  • 打赏
  • 举报
回复
是啊,因为数组不是线程安全的啊。
中文命名法 2018-04-19
  • 打赏
  • 举报
回复
引用 1 楼 sp1234 的回复:
什么“锁”?哪儿有啊?
一个线程在更新 结构数组[0] 的同时,结构数组[5] 是开放的,不会拒绝其他线程写入,是这样理解吗?
  • 打赏
  • 举报
回复
什么“锁”?哪儿有啊?

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧