由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 想问一下那道H2O的多线程题
相关主题
请教L家生成H2O水分子的题。昨天onsite被问到的 multithreading 题目
请教一下那道H2O的题人生中第一次面试
multi thread复习请教又tmd的面砸了一个,还是贴贴面经
failed bloomberg phone interviewGoogle及其它面经 (长,慎入)
LinkedIn 面经昨天面试遇到的两道题,编程语言和数据库设计相关
一道多线程的面试题交通灯OO design哪道题在哪里可以找到??
攒人品。面试经历(1)Bloomberg电面面经
为啥说semaphore是进程间的一种通信机制?embedded software engineer面经
相关话题的讨论汇总
话题: ________话题: ____话题: mutex话题: ocount
进入JobHunting版参与讨论
1 (共1页)
c*******7
发帖数: 438
1
题目是这样的:实现两个函数: H() and O(), 这两个函数会被多线程调用。如果满足
当前2个线程调用H(),和1个线程调用O(),让以上3个线程返回,产生一个水分子(可能
是HHO,HOH,OHH)。调用H()的当前线程不能大于2,调用O()的当前线程不能大于1。
我思前想后,写了一个,请大家帮忙看看。(排版有问题,tab改成下划线了。。。)
(发现前面写的好像不太对,又改了一次)
private Object mutex = new Object;
private Semaphore hSemaphore = new Semaphore(2);
private Semaphore oSemaphore = new Semaphore(1);
private int hCount;
private int oCount;
public void H() {
____hSemaphore.acquire();
____processH();
____
____synchronize(mutex) {
________hCount++;
________if(oCount == 1 && hCount == 2) {
____________oCount = 0;
____________hCount = 0;
____________hSemaphore.release(2);
____________oSemaphore.release();
____________mutex.notifyAll();
________}
________else {
____________mutex.wait();
________}
____}
}
public void O() {
____oSemaphore.acquire();
____processO();
____
____synchronize(mutex) {
________oCount++;
________if(oCount == 1 && hCount == 2) {
____________oCount = 0;
____________hCount = 0;
____________hSemaphore.release(2);
____________oSemaphore.release();
____________mutex.notifyAll();
________}
________else {
____________mutex.wait();
________}
____}
}
d****n
发帖数: 12461
2
用semaphore
f**********t
发帖数: 1001
3
class H2O {
int _nH;
int _nO;
mutex _mx;
condition_variable _cv;
public:
H2O() : _nH(0), nO(0) {}
void H() {
unique_lock ul(_mx);
_cv.wait(ul, [](){_nH < 2;});
if (++_nH == 2 && _nO == 1) {
cout << "water ";
_nH = 0;
_nO = 0;
_cv.notify_all();
}
}
};

【在 c*******7 的大作中提到】
: 题目是这样的:实现两个函数: H() and O(), 这两个函数会被多线程调用。如果满足
: 当前2个线程调用H(),和1个线程调用O(),让以上3个线程返回,产生一个水分子(可能
: 是HHO,HOH,OHH)。调用H()的当前线程不能大于2,调用O()的当前线程不能大于1。
: 我思前想后,写了一个,请大家帮忙看看。(排版有问题,tab改成下划线了。。。)
: (发现前面写的好像不太对,又改了一次)
: private Object mutex = new Object;
: private Semaphore hSemaphore = new Semaphore(2);
: private Semaphore oSemaphore = new Semaphore(1);
: private int hCount;
: private int oCount;

h**********c
发帖数: 4120
4
下划线可以用regex replace 掉
^[_]+
L*****1
发帖数: 34
5
mark,同问
1 (共1页)
进入JobHunting版参与讨论
相关主题
embedded software engineer面经LinkedIn 面经
某start-up on-site 小感一道多线程的面试题
一道涉及OO,算法,多线程的设计题攒人品。面试经历(1)
总是过不了2小时内的码工onsite为啥说semaphore是进程间的一种通信机制?
请教L家生成H2O水分子的题。昨天onsite被问到的 multithreading 题目
请教一下那道H2O的题人生中第一次面试
multi thread复习请教又tmd的面砸了一个,还是贴贴面经
failed bloomberg phone interviewGoogle及其它面经 (长,慎入)
相关话题的讨论汇总
话题: ________话题: ____话题: mutex话题: ocount