如何让两个线程同时运行? (Visual C ++)

时间:2018-01-31 13:32:49

标签: multithreading visual-c++ c++-cli

我试图让两个线程同时运行,从一个整数中加减。我们的想法是在它们上面有一个随机的睡眠时间,这样它们就可以在另一个睡觉时加减。因此,例如,如果添加的线程让我们睡着了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的增量发生,而不是添加或减去随机数量。

0 个答案:

没有答案