由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 问一道multithreading的题
相关主题
求问一道multithreading问题问个multi threading code 题,同时请问高手mutil threading 编程有什么好书,网站和教程推荐?
LinkedIn 电面thread-safe blockingqueue
昨天onsite被问到的 multithreading 题目怎么练习multi-threading,平常工作都是用Java框架
multi thread复习请教攒人品。面试经历(1)
failed bloomberg phone interview为啥说semaphore是进程间的一种通信机制?
embedded Linux ,面试了几次,都问这个问题了。不知道答案??人生中第一次面试
Quantcast电面又tmd的面砸了一个,还是贴贴面经
爆个L家面静吧Google及其它面经 (长,慎入)
相关话题的讨论汇总
话题: semaphore话题: foo话题: bar
进入JobHunting版参与讨论
1 (共1页)
b*****n
发帖数: 2324
1
两个process,一个输出苹果,一个输出橘子,要求两个process必须take turns。
要求不能有busy waiting。
b*****n
发帖数: 2324
2
这就是busy waiting的答案吧。
L*****1
发帖数: 34
3
被问过一道一样的题目,不过是foo和bar,转一个大神的解答:
Semaphore sem1=new Semaphore(1);
Semaphore sem2=new Semaphore(0); //only when permit number is bigger
than 0
void functionFoo() {
while(1){
sem1.acquire();
System.out.print("Foo");
sem2.release();
}
}
void functionBar() {
while(1) {
sem2.acquire();
System.out.print("Bar");
sem1.release();
}
}
sem2=0 确保一上来block
sem1=1 确保第一次不会block
require就是-1
release就是+1
p*****2
发帖数: 21240
4

这个就是ping pong吧。可以用akka做。

【在 b*****n 的大作中提到】
: 两个process,一个输出苹果,一个输出橘子,要求两个process必须take turns。
: 要求不能有busy waiting。

l********s
发帖数: 358
5
这个解法不错。不用busy waiting一般就是在condition variable上面await &
notification,忘了Semaphore也有signaling的作用。
如果可以用Go的话,用channel很容易实现。类似在java里面用blockingQueue也可以,
一个blockingQueue放apple,一个blockingQueue放orange。开始的时候apple的
blockingQueue里面有一个apple,orange的blockingQueue里面是空。然后拿一个apple
后放orange,拿一个orange放一个apple。

【在 L*****1 的大作中提到】
: 被问过一道一样的题目,不过是foo和bar,转一个大神的解答:
: Semaphore sem1=new Semaphore(1);
: Semaphore sem2=new Semaphore(0); //only when permit number is bigger
: than 0
: void functionFoo() {
: while(1){
: sem1.acquire();
: System.out.print("Foo");
: sem2.release();
: }

k*******a
发帖数: 433
6
busy waiting是什么
g*********e
发帖数: 14401
7
sem_t sm
sm.capacity=1
sm.init=0
thread 1:
while 1
sm.up
"apple"
thread 2:
while 1
sm.down
"orange"
m*****k
发帖数: 731
8
+1
actually same idea in essence as Logan91's

apple

【在 l********s 的大作中提到】
: 这个解法不错。不用busy waiting一般就是在condition variable上面await &
: notification,忘了Semaphore也有signaling的作用。
: 如果可以用Go的话,用channel很容易实现。类似在java里面用blockingQueue也可以,
: 一个blockingQueue放apple,一个blockingQueue放orange。开始的时候apple的
: blockingQueue里面有一个apple,orange的blockingQueue里面是空。然后拿一个apple
: 后放orange,拿一个orange放一个apple。

m*****k
发帖数: 731
I*******d
发帖数: 108
10
二爷用的技术好新。。膜拜

【在 p*****2 的大作中提到】
:
: 这个就是ping pong吧。可以用akka做。

g*****g
发帖数: 34805
11
It says 2 processes, not 2 threads. Just send a message back and force. No
need to sync.
p******2
发帖数: 86
12
进程的怎么写?
写个来看看吧

【在 g*****g 的大作中提到】
: It says 2 processes, not 2 threads. Just send a message back and force. No
: need to sync.

m*****k
发帖数: 731
13
same idea , old school way,
replace the blockingQueue to real msgQ like rabbitMQ,
or buzz word like kafka
b*********0
发帖数: 53
14
另一种解法,多进程的话把shared data放到share memory就可以
int flag = 0;
mutex mtx;
bool run = true;
void Foo() {
while (run) {
lock_guard lock(mtx);
if (flag == 0) {
cout << "Foo";
flag = 1;
}
}
}
void Bar() {
while (run) {
lock_guard lock(mtx);
if (flag == 1) {
cout << "Bar";
flag = 0;
}
}
}

【在 b*****n 的大作中提到】
: 两个process,一个输出苹果,一个输出橘子,要求两个process必须take turns。
: 要求不能有busy waiting。

1 (共1页)
进入JobHunting版参与讨论
相关主题
Google及其它面经 (长,慎入)failed bloomberg phone interview
昨天面试遇到的两道题,编程语言和数据库设计相关embedded Linux ,面试了几次,都问这个问题了。不知道答案??
交通灯OO design哪道题在哪里可以找到??Quantcast电面
求助 odd 和 multithread 的复习爆个L家面静吧
求问一道multithreading问题问个multi threading code 题,同时请问高手mutil threading 编程有什么好书,网站和教程推荐?
LinkedIn 电面thread-safe blockingqueue
昨天onsite被问到的 multithreading 题目怎么练习multi-threading,平常工作都是用Java框架
multi thread复习请教攒人品。面试经历(1)
相关话题的讨论汇总
话题: semaphore话题: foo话题: bar