r****o 发帖数: 1950 | 1 昨天电面,一道题目是
多个线程访问一个hash table, 有三个操作,insert, delete和read,问哪些操作要加
mutex保护,我说3个都要加。
我答得对不对? |
s********d 发帖数: 1199 | 2 追问谁能总结一下
线程之间有哪些通信方式?
进程之间又有哪些方式?
【在 r****o 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 昨天电面,一道题目是 : 多个线程访问一个hash table, 有三个操作,insert, delete和read,问哪些操作要加 : mutex保护,我说3个都要加。 : 我答得对不对?
|
r****o 发帖数: 1950 | 3 我知道的是:
同一个进程内的线程之间可以通过共享内存通信,
不同进程的线程之间,或者不同进程之间可以通过管道,信号量,socket等来通信。
【在 s********d 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 追问谁能总结一下 : 线程之间有哪些通信方式? : 进程之间又有哪些方式?
|
s********a 发帖数: 1447 | |
x***y 发帖数: 633 | 5 For read operation, you can not use mutex...Like the read/write lock in
pthread, only write needs exclusive access.....
【在 r****o 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 昨天电面,一道题目是 : 多个线程访问一个hash table, 有三个操作,insert, delete和read,问哪些操作要加 : mutex保护,我说3个都要加。 : 我答得对不对?
|
l*y 发帖数: 21010 | 6 我记得操作系统里说的是,read可以允许多个read同时进行,但不能read和write同时
进行。所以多个read需要一个lock就够了。
【在 r****o 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 我知道的是: : 同一个进程内的线程之间可以通过共享内存通信, : 不同进程的线程之间,或者不同进程之间可以通过管道,信号量,socket等来通信。
|
r****o 发帖数: 1950 | 7 那是不是说read还是要加mutex的?
【在 l*y 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 我记得操作系统里说的是,read可以允许多个read同时进行,但不能read和write同时 : 进行。所以多个read需要一个lock就够了。
|
r****o 发帖数: 1950 | |
m****n 发帖数: 589 | 9 那我也删掉吧
【在 r****o 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 说错了,删掉了。
|
x***y 发帖数: 633 | 10 For concurrency programming, beside mutex, you can also use semaphore,
critical sectoin, cv or block/write locks as synchronization primitives...
【在 r****o 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 那是不是说read还是要加mutex的?
|
|
|
t******a 发帖数: 1200 | 11 这道题主要考的不是这个 - 还会有 follow-up 问题的。关键是不要把 hash table
看成是一个黑盒子,搞 hash-table level mutex, 优化的方法要在 hash-table 里
面搞 bin level 的 mutex.
【在 r****o 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 昨天电面,一道题目是 : 多个线程访问一个hash table, 有三个操作,insert, delete和read,问哪些操作要加 : mutex保护,我说3个都要加。 : 我答得对不对?
|
s********a 发帖数: 1447 | 12 不是很清楚你说的意思
你是不是说 不能 这样
mutex_lock;
hash[index];
mutex_unlock;
怎样搞hash table 里的bin level mutex?
【在 t******a 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 这道题主要考的不是这个 - 还会有 follow-up 问题的。关键是不要把 hash table : 看成是一个黑盒子,搞 hash-table level mutex, 优化的方法要在 hash-table 里 : 面搞 bin level 的 mutex.
|
t******a 发帖数: 1200 | 13 Bin level mutex 实现要依赖于 hashtable 的实现。code 写起来其实很简单,
但核心思想是如果不同的 hashkey 映射到不同的 hash bin 里的话,那么对
这两个 hashkey 可以同时进行写操作。
你说的方法,把 hashtable 当成black box, 把所有的方法都搞成互斥的,可以
解决同步问题,但效率低下。出题人问 hashtable 而不是一个 stack/linked list
其实是有原因的
【在 s********a 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 不是很清楚你说的意思 : 你是不是说 不能 这样 : mutex_lock; : hash[index]; : mutex_unlock; : 怎样搞hash table 里的bin level mutex?
|
s********a 发帖数: 1447 | 14 你的意思是不是大概这样子?
int hash(int index) {
......
mutex_lock;
process index;
mutex_unlock;
......
return key;
}
【在 t******a 的大作中提到】![](/moin_static193/solenoid/img/up.png) : Bin level mutex 实现要依赖于 hashtable 的实现。code 写起来其实很简单, : 但核心思想是如果不同的 hashkey 映射到不同的 hash bin 里的话,那么对 : 这两个 hashkey 可以同时进行写操作。 : 你说的方法,把 hashtable 当成black box, 把所有的方法都搞成互斥的,可以 : 解决同步问题,但效率低下。出题人问 hashtable 而不是一个 stack/linked list : 其实是有原因的
|
m****u 发帖数: 3915 | 15 嗯,读写者问题嘛,确实都要加
【在 r****o 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 昨天电面,一道题目是 : 多个线程访问一个hash table, 有三个操作,insert, delete和read,问哪些操作要加 : mutex保护,我说3个都要加。 : 我答得对不对?
|
s******9 发帖数: 84 | 16 mutex的个数要跟bin的个数一样多。
【在 s********a 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 你的意思是不是大概这样子? : int hash(int index) { : ...... : mutex_lock; : process index; : mutex_unlock; : ...... : return key; : }
|
s******9 发帖数: 84 | 17 mutex的个数要跟bin的个数一样多。
【在 s********a 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 你的意思是不是大概这样子? : int hash(int index) { : ...... : mutex_lock; : process index; : mutex_unlock; : ...... : return key; : }
|
w****u 发帖数: 3147 | |