递归火山软件开发平台

标题: 哈希表多线程会崩溃,该怎么做? [打印本页]

作者: Fang0x378    时间: 2021-6-23 21:33
标题: 哈希表多线程会崩溃,该怎么做?
哈希表,一个线程定时枚举,枚举循环中可能有删除操作。(定时清理资源)
另一个线程不定时会cha询、枚举cha询,插入等操作。(新客户登录 退出等操作)
测试了一下,很大几率会崩溃。
请问大神,该如何避免崩溃的发生?

作者: 呵呵仙8    时间: 2021-6-23 22:12
互斥锁类用上了?
作者: 小蜗牛    时间: 2021-6-23 22:13
枚举的过程中,不可删除,除非吴总做修改...
解决方案...在枚举的过程中,加入到数组中,再数组中枚举清理
作者: Fang0x378    时间: 2021-6-23 22:39
呵呵仙8 发表于 2021-6-23 22:12
互斥锁类用上了?

刚看了一下,互斥锁用上貌似可以。
我原来以为互斥了以后返回了,原来在等待哦
作者: Fang0x378    时间: 2021-6-23 22:46
小蜗牛 发表于 2021-6-23 22:13
枚举的过程中,不可删除,除非吴总做修改...
解决方案...在枚举的过程中,加入到数组中,再数组中枚举清理 ...

嗯嗯
作者: 呵呵仙8    时间: 2021-6-23 22:54
Fang0x378 发表于 2021-6-23 22:39
刚看了一下,互斥锁用上貌似可以。
我原来以为互斥了以后返回了,原来在等待哦 ...

互斥锁就易语言的许可证!!
作者: 341991    时间: 2024-3-24 21:29
希望官方能封装个tbb::concurrent_hash_map。这个支持多线程
作者: 199    时间: 2024-3-25 07:38
加了互斥锁是不是就影响并发的速度了
作者: Xelloss0618    时间: 2024-3-25 08:57
199 发表于 2024-3-25 07:38
加了互斥锁是不是就影响并发的速度了

并发性能和安全本来就是鱼与熊掌,最安全还是加互斥锁,虽然有一些影响,但不算大。
C++也有无锁设计的哈希表,像上面说的tbb,但不是绝对安全,CPU型号和架构繁多,可能在某些CPU上出bug。
作者: lsfeeling    时间: 2024-3-25 09:54
本帖最后由 lsfeeling 于 2024-3-25 10:00 编辑

哈希表和集线程不安全,要加锁就行了。加了锁肯定会影响速度。这就要看你的并发量有多大了。不是太大的话就考虑分表的思路,
这东西本来就是在内存用的,存临时数据。你能有多大的并发量啊。基本没啥问题。





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