递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 4168|回复: 5
打印 上一主题 下一主题

[视窗] 关于线程许可锁的问题

[复制链接]

7

主题

67

帖子

750

积分

高级会员

Rank: 4

积分
750
跳转到指定楼层
楼主
发表于 2022-10-11 14:41:43 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
一个方法添加了临界标志,主线程同时启动3条线程去方法该方法。当线程在执行的途中,主线程去调用这个方法程序就会卡死。按理说不应该把主线程调用放到最后进行列队处理吗?怎么会直接卡死呢?

GIF 2022-10-11 14-38-42.gif (214.18 KB, 下载次数: 33)

贴上GIF

贴上GIF
回复

使用道具 举报

26

主题

1887

帖子

6864

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
6864
沙发
发表于 2022-10-11 15:05:00 | 只看该作者
另外线程之间是同步并行,并不是队列
如果子线程进入了临界区,这时主线程再去尝试进入,就会卡死
回复

使用道具 举报

7

主题

67

帖子

750

积分

高级会员

Rank: 4

积分
750
板凳
 楼主| 发表于 2022-10-11 23:32:34 | 只看该作者
Xelloss0618 发表于 2022-10-11 15:05
另外线程之间是同步并行,并不是队列
如果子线程进入了临界区,这时主线程再去尝试进入,就会卡死 ...

感谢 X大解答!还有个问题请教一下,多线程访问公共变量\方法需要进行加锁。那么如果访问系统API函数呢?也是一样的吗?(我的意思是再调用API的时候系统会不会为了线程安全 自行加锁处理)
回复

使用道具 举报

73

主题

334

帖子

1974

积分

金牌会员

嘿嘿哈哈

Rank: 6Rank: 6

积分
1974
地板
发表于 2022-10-12 09:17:06 | 只看该作者
前几天我写个程序,多线程访问同一个dll会出错,不知道啥原因
回复

使用道具 举报

26

主题

1887

帖子

6864

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
6864
5#
发表于 2022-10-12 15:00:47 | 只看该作者
傲慢与偏见 发表于 2022-10-11 23:32
感谢 X大解答!还有个问题请教一下,多线程访问公共变量\方法需要进行加锁。那么如果访问系统API函数呢? ...

大部分系统API是线程安全的,不需要加锁
只要不是多个线程访问同一个变量,一般不需要加锁
回复

使用道具 举报

7

主题

67

帖子

750

积分

高级会员

Rank: 4

积分
750
6#
 楼主| 发表于 2022-10-12 17:57:46 | 只看该作者
Xelloss0618 发表于 2022-10-12 15:00
大部分系统API是线程安全的,不需要加锁
只要不是多个线程访问同一个变量,一般不需要加锁 ...

谢谢, 那多线程访问方法 需要在方法里面加锁吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-11-6 03:18 , Processed in 0.090255 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表