我试图让两个线程同时运行,从一个整数中加减。我们的想法是在它们上面有一个随机的睡眠时间,这样它们就可以在另一个睡觉时加减。因此,例如,如果添加的线程让我们睡着了12秒,那么减去的线程可能会减去一次,但在另一次唤醒之前减去两到三次。
using namespace System;
using namespace System::Threading;
public ref class RunStack {
private: static Semaphore^ stackSemaphor;
static int itemStack = 10;
public: static void addItem() {
Random^ Rand = gcnew Random();
while (true) {
stackSemaphor->WaitOne();
int Pause = Rand->Next(1, 10);
Pause = Pause * 1000;
Thread::Sleep(Pause);
itemStack++;
Console::CursorLeft = 3;
Console::CursorTop = 3;
Console::WriteLine("Amount in stack: " + itemStack);
stackSemaphor->Release();
}
}
public: static void subItem() {
Random^ Rand = gcnew Random();
while (true) {
stackSemaphor->WaitOne();
int Pause = Rand->Next(1, 10);
Pause = Pause * 1000;
Thread::Sleep(Pause);
itemStack--;
Console::CursorLeft = 3;
Console::CursorTop = 3;
Console::WriteLine("Amount in stack: " + itemStack);
stackSemaphor->Release();
}
}
void Main() {
stackSemaphor = gcnew Semaphore(1, 1);
ThreadStart^ ThreadDelegate1 = gcnew ThreadStart(addItem);
ThreadStart^ ThreadDelegate2 = gcnew ThreadStart(subItem);
Thread^ Thread1 = gcnew Thread(ThreadDelegate1);
Thread1->Priority = ThreadPriority::Normal;
Thread1->Start();
Thread^ Thread2 = gcnew Thread(ThreadDelegate2);
Thread2->Priority = ThreadPriority::Normal;
Thread2->Start();
}
};
int main(array<System::String ^> ^args)
{
Console::Title = "ItemStack";
RunStack^ RunIt = gcnew RunStack();
RunIt->Main();
return 0;
}
这是我到目前为止所做的,但我不确定如何让他们不等彼此。现在它只增加1,然后在添加1之前等待它减去1,依此类推。虽然我希望它能够加/减,即使对方正在睡觉,而且睡眠时间更短。我只希望它以1的增量发生,而不是添加或减去随机数量。