Redian新闻
>
问道多线程的简单题目
avatar
问道多线程的简单题目# JobHunting - 待字闺中
r*o
1
昨天电面,一道题目是
多个线程访问一个hash table, 有三个操作,insert, delete和read,问哪些操作要加
mutex保护,我说3个都要加。
我答得对不对?
avatar
s*d
2
追问谁能总结一下
线程之间有哪些通信方式?
进程之间又有哪些方式?

【在 r****o 的大作中提到】
: 昨天电面,一道题目是
: 多个线程访问一个hash table, 有三个操作,insert, delete和read,问哪些操作要加
: mutex保护,我说3个都要加。
: 我答得对不对?

avatar
r*o
3
我知道的是:
同一个进程内的线程之间可以通过共享内存通信,
不同进程的线程之间,或者不同进程之间可以通过管道,信号量,socket等来通信。

【在 s********d 的大作中提到】
: 追问谁能总结一下
: 线程之间有哪些通信方式?
: 进程之间又有哪些方式?

avatar
s*a
4
read不是必须的吧
avatar
x*y
5
For read operation, you can not use mutex...Like the read/write lock in
pthread, only write needs exclusive access.....

【在 r****o 的大作中提到】
: 昨天电面,一道题目是
: 多个线程访问一个hash table, 有三个操作,insert, delete和read,问哪些操作要加
: mutex保护,我说3个都要加。
: 我答得对不对?

avatar
l*y
6
我记得操作系统里说的是,read可以允许多个read同时进行,但不能read和write同时
进行。所以多个read需要一个lock就够了。

【在 r****o 的大作中提到】
: 我知道的是:
: 同一个进程内的线程之间可以通过共享内存通信,
: 不同进程的线程之间,或者不同进程之间可以通过管道,信号量,socket等来通信。

avatar
r*o
7
那是不是说read还是要加mutex的?

【在 l*y 的大作中提到】
: 我记得操作系统里说的是,read可以允许多个read同时进行,但不能read和write同时
: 进行。所以多个read需要一个lock就够了。

avatar
r*o
8
说错了,删掉了。
avatar
m*n
9
那我也删掉吧

【在 r****o 的大作中提到】
: 说错了,删掉了。
avatar
x*y
10
For concurrency programming, beside mutex, you can also use semaphore,
critical sectoin, cv or block/write locks as synchronization primitives...

【在 r****o 的大作中提到】
: 那是不是说read还是要加mutex的?
avatar
t*a
11
这道题主要考的不是这个 - 还会有 follow-up 问题的。关键是不要把 hash table
看成是一个黑盒子,搞 hash-table level mutex, 优化的方法要在 hash-table 里
面搞 bin level 的 mutex.

【在 r****o 的大作中提到】
: 昨天电面,一道题目是
: 多个线程访问一个hash table, 有三个操作,insert, delete和read,问哪些操作要加
: mutex保护,我说3个都要加。
: 我答得对不对?

avatar
s*a
12
不是很清楚你说的意思
你是不是说 不能 这样
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.

avatar
t*a
13
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?

avatar
s*a
14
你的意思是不是大概这样子?
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
: 其实是有原因的

avatar
m*u
15
嗯,读写者问题嘛,确实都要加

【在 r****o 的大作中提到】
: 昨天电面,一道题目是
: 多个线程访问一个hash table, 有三个操作,insert, delete和read,问哪些操作要加
: mutex保护,我说3个都要加。
: 我答得对不对?

avatar
s*9
16
mutex的个数要跟bin的个数一样多。

【在 s********a 的大作中提到】
: 你的意思是不是大概这样子?
: int hash(int index) {
: ......
: mutex_lock;
: process index;
: mutex_unlock;
: ......
: return key;
: }

avatar
s*9
17
mutex的个数要跟bin的个数一样多。

【在 s********a 的大作中提到】
: 你的意思是不是大概这样子?
: int hash(int index) {
: ......
: mutex_lock;
: process index;
: mutex_unlock;
: ......
: return key;
: }

avatar
w*u
18
read 不用其他都要加sync
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。