Fang0x378 发表于 2021-6-23 21:33:26

哈希表多线程会崩溃,该怎么做?

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

呵呵仙8 发表于 2021-6-23 22:12:38

互斥锁类用上了?

小蜗牛 发表于 2021-6-23 22:13:59

枚举的过程中,不可删除,除非吴总做修改...
解决方案...在枚举的过程中,加入到数组中,再数组中枚举清理

Fang0x378 发表于 2021-6-23 22:39:31

呵呵仙8 发表于 2021-6-23 22:12
互斥锁类用上了?

刚看了一下,互斥锁用上貌似可以。
我原来以为互斥了以后返回了,原来在等待哦

Fang0x378 发表于 2021-6-23 22:46:58

小蜗牛 发表于 2021-6-23 22:13
枚举的过程中,不可删除,除非吴总做修改...
解决方案...在枚举的过程中,加入到数组中,再数组中枚举清理 ...

嗯嗯:):)

呵呵仙8 发表于 2021-6-23 22:54:49

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

互斥锁就易语言的许可证!!

341991 发表于 2024-3-24 21:29:26

希望官方能封装个tbb::concurrent_hash_map。这个支持多线程

199 发表于 2024-3-25 07:38:56

加了互斥锁是不是就影响并发的速度了

Xelloss0618 发表于 2024-3-25 08:57:29

199 发表于 2024-3-25 07:38
加了互斥锁是不是就影响并发的速度了

并发性能和安全本来就是鱼与熊掌,最安全还是加互斥锁,虽然有一些影响,但不算大。
C++也有无锁设计的哈希表,像上面说的tbb,但不是绝对安全,CPU型号和架构繁多,可能在某些CPU上出bug。

lsfeeling 发表于 2024-3-25 09:54:16

本帖最后由 lsfeeling 于 2024-3-25 10:00 编辑

哈希表和集线程不安全,要加锁就行了。加了锁肯定会影响速度。这就要看你的并发量有多大了。不是太大的话就考虑分表的思路,
这东西本来就是在内存用的,存临时数据。你能有多大的并发量啊。基本没啥问题。
页: [1]
查看完整版本: 哈希表多线程会崩溃,该怎么做?