我的问题是我不知道如何使用Ruby同步多个线程。该任务是创建六个线程并立即启动它们。他们都应该puts "Thread 1" Hi"按我需要的顺序依次进行一些工作(例如)。
经过一段时间与Mutex和Condition Variable的斗争后,我实现了我的目标。这段代码有点混乱,我故意不使用循环来获得“更清晰的视图”。
cv = ConditionVariable.new
mutex = Mutex.new
mutex2 = Mutex.new
cv2 = ConditionVariable.new
mutex3 = Mutex.new
cv3 = ConditionVariable.new
mutex4 = Mutex.new
cv4 = ConditionVariable.new
mutex5 = Mutex.new
cv5 = ConditionVariable.new
mutex6 = Mutex.new
cv6 = ConditionVariable.new
Thread.new do
mutex.synchronize {
puts 'First: Hi'
cv.wait(mutex)
puts 'First: Bye'
#cv.wait(mutex)
cv.signal
puts 'First: One more time'
}
end
Thread.new do
mutex.synchronize {
puts 'Second: Hi'
cv.signal
cv.wait(mutex)
puts 'Second:Bye'
cv.signal
}
mutex2.synchronize …Run Code Online (Sandbox Code Playgroud) 这是我的代码:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
struct Computer
{
char * model;
char * assembler;
int processorInt;
};
int main()
{
Computer comp;
char* model;
char* assembler;
int processorInt;
cin>>model;
cin>>assembler;
cin>>processor int;
comp.model = model;
comp.assembler = assembler;
comp.processorInt = processorInt;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
//如果我这样做,它可以工作,但如果我以另一种方式做,它会给出分段错误
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
struct Computer
{
char * model;
char * assembler;
int processorInt;
};
void setValues()
{
Computer comp;
char* model;
char* assembler; …Run Code Online (Sandbox Code Playgroud)