技术解析

这个场景下怎么加锁?
0
2021-06-22 08:41:28
idczone

假设有 A,B,C 三个函数

1.A 执行时,不能并发 B 或者 C

2.B 或 C 执行时,不能并发 A

3.B,C 之间可以并发执行

这个场景锁应该怎么处理,C/C++


搞一个调度器,只锁调度器

可以解释下吗

冲突的是资源,对资源加锁,函数持有资源

A 写锁 B/C 读锁

好像是正解。读写互斥,读读不互斥对吧。另外如果我的场景是 A,B 两个函数,AB 间互斥,AA 互斥,BB 并发,也是用读写锁对吧

读写锁正解。
还有一种办法,把 BC 封装到 D 中,D 和 A 互斥锁。

嗯,不过这样好像需要把 D 搞成异步任务的管理者

创建两把锁:
A () {
lock(lck1);
lock(lck2);
//do something
lock(lck2);
lock(lck1);
}
B() {
lock(lck1);
//do something
lock(lck1);
}
C() {
lock(lck2);
//do something
lock(lck2);
}

//do something 后是 unlock

嗯,也是一种思路

又考虑了下,这个方式实际上是有问题的,比如 A 拿到 L1 后被 C 先抢到 L2,那么 C 就没办法和 B 并发了

注意 注意 “并发” 不等于 “并行” 不要偷换概念

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服