问道多线程的简单题目# JobHunting - 待字闺中r*o2010-04-03 07:041 楼昨天电面,一道题目是多个线程访问一个hash table, 有三个操作,insert, delete和read,问哪些操作要加mutex保护,我说3个都要加。我答得对不对?
s*d2010-04-03 07:042 楼追问谁能总结一下线程之间有哪些通信方式?进程之间又有哪些方式?【在 r****o 的大作中提到】: 昨天电面,一道题目是: 多个线程访问一个hash table, 有三个操作,insert, delete和read,问哪些操作要加: mutex保护,我说3个都要加。: 我答得对不对?
r*o2010-04-03 07:043 楼我知道的是:同一个进程内的线程之间可以通过共享内存通信,不同进程的线程之间,或者不同进程之间可以通过管道,信号量,socket等来通信。【在 s********d 的大作中提到】: 追问谁能总结一下: 线程之间有哪些通信方式?: 进程之间又有哪些方式?
x*y2010-04-03 07:045 楼For read operation, you can not use mutex...Like the read/write lock inpthread, only write needs exclusive access.....【在 r****o 的大作中提到】: 昨天电面,一道题目是: 多个线程访问一个hash table, 有三个操作,insert, delete和read,问哪些操作要加: mutex保护,我说3个都要加。: 我答得对不对?
l*y2010-04-03 07:046 楼我记得操作系统里说的是,read可以允许多个read同时进行,但不能read和write同时进行。所以多个read需要一个lock就够了。【在 r****o 的大作中提到】: 我知道的是:: 同一个进程内的线程之间可以通过共享内存通信,: 不同进程的线程之间,或者不同进程之间可以通过管道,信号量,socket等来通信。
r*o2010-04-03 07:047 楼那是不是说read还是要加mutex的?【在 l*y 的大作中提到】: 我记得操作系统里说的是,read可以允许多个read同时进行,但不能read和write同时: 进行。所以多个read需要一个lock就够了。
x*y2010-04-03 07:0410 楼For concurrency programming, beside mutex, you can also use semaphore,critical sectoin, cv or block/write locks as synchronization primitives...【在 r****o 的大作中提到】: 那是不是说read还是要加mutex的?
t*a2010-04-03 07:0411 楼这道题主要考的不是这个 - 还会有 follow-up 问题的。关键是不要把 hash table看成是一个黑盒子,搞 hash-table level mutex, 优化的方法要在 hash-table 里面搞 bin level 的 mutex.【在 r****o 的大作中提到】: 昨天电面,一道题目是: 多个线程访问一个hash table, 有三个操作,insert, delete和read,问哪些操作要加: mutex保护,我说3个都要加。: 我答得对不对?
s*a2010-04-03 07:0412 楼不是很清楚你说的意思你是不是说 不能 这样mutex_lock;hash[index];mutex_unlock;怎样搞hash table 里的bin level mutex?【在 t******a 的大作中提到】: 这道题主要考的不是这个 - 还会有 follow-up 问题的。关键是不要把 hash table: 看成是一个黑盒子,搞 hash-table level mutex, 优化的方法要在 hash-table 里: 面搞 bin level 的 mutex.
t*a2010-04-03 07:0413 楼Bin level mutex 实现要依赖于 hashtable 的实现。code 写起来其实很简单,但核心思想是如果不同的 hashkey 映射到不同的 hash bin 里的话,那么对这两个 hashkey 可以同时进行写操作。你说的方法,把 hashtable 当成black box, 把所有的方法都搞成互斥的,可以解决同步问题,但效率低下。出题人问 hashtable 而不是一个 stack/linked list其实是有原因的【在 s********a 的大作中提到】: 不是很清楚你说的意思: 你是不是说 不能 这样: mutex_lock;: hash[index];: mutex_unlock;: 怎样搞hash table 里的bin level mutex?
s*a2010-04-03 07:0414 楼你的意思是不是大概这样子?int hash(int index) {......mutex_lock;process index;mutex_unlock;......return key;}【在 t******a 的大作中提到】: Bin level mutex 实现要依赖于 hashtable 的实现。code 写起来其实很简单,: 但核心思想是如果不同的 hashkey 映射到不同的 hash bin 里的话,那么对: 这两个 hashkey 可以同时进行写操作。: 你说的方法,把 hashtable 当成black box, 把所有的方法都搞成互斥的,可以: 解决同步问题,但效率低下。出题人问 hashtable 而不是一个 stack/linked list: 其实是有原因的
m*u2010-04-03 07:0415 楼嗯,读写者问题嘛,确实都要加【在 r****o 的大作中提到】: 昨天电面,一道题目是: 多个线程访问一个hash table, 有三个操作,insert, delete和read,问哪些操作要加: mutex保护,我说3个都要加。: 我答得对不对?
s*92010-04-03 07:0416 楼mutex的个数要跟bin的个数一样多。【在 s********a 的大作中提到】: 你的意思是不是大概这样子?: int hash(int index) {: ......: mutex_lock;: process index;: mutex_unlock;: ......: return key;: }
s*92010-04-03 07:0417 楼mutex的个数要跟bin的个数一样多。【在 s********a 的大作中提到】: 你的意思是不是大概这样子?: int hash(int index) {: ......: mutex_lock;: process index;: mutex_unlock;: ......: return key;: }