繁体   English   中英

使用事件进行多线程求和

[英]Multithreading Summation using Event

我试图在多线程部分中强调我的知识,但是在使事件顺利进行方面存在一些问题。

因此,基本上我正在使用两个线程,一个线程只是将某个变量yy1设置为一个,第二个线程应该具有一个wait函数来获取yy1的值并添加一个额外的值并将结果放入变量y2中。

我可以使用Mutex或信号量来做到这一点,但是很难与它一起使用事件。

    #include <process.h>
#include <windows.h>
#include <iostream>
#include <math.h>

using namespace std;
void ThreadFunction1(void *pParam);
void ThreadFunction2(void *pParam);


HANDLE h_Event1;
int yy1= 0;
int y2 = 0;

void main(void)                             // Primary Thread
{
    h_Event1 = CreateEvent(NULL,            // Security Attributes
        FALSE,              // Manual Reset: no/auto , Auto Reset when the event released
        FALSE,              // Initial Statse: not set , not occupied 
        NULL);              // Name: no


    _beginthread(ThreadFunction1,           // Pointer to Thread Function
        0,                  // Stack Size set automatically
        (void*)&yy1);   // Frequency


    _beginthread(ThreadFunction2,           // Pointer to Thread Function
        0,                  // Stack Size set automatically
        (void*)&y2);    // Frequency

    SetEvent(h_Event1);
    CloseHandle(h_Event1);

    cout << yy1<<endl;
    cout << y2 << endl;

}

void ThreadFunction1(void *pParam)          // Secundary Thread
{
    int xx1;

    xx1 = (int)*(int*)pParam;

    WaitForSingleObject(h_Event1, INFINITE);
    xx1 = 1;
    *(int*)pParam = xx1;
    Sleep(100);
    _endthread();
}

void ThreadFunction2(void *pParam)          // Secundary Thread
{
    int xx1;

    xx1 = (int)*(int*)pParam;

    WaitForSingleObject(h_Event1, INFINITE);
    xx1 = 1+ (yy1);
    *(int*)pParam = xx1;
    Sleep(10);

    _endthread();
}

输出为:

0
2

注意:我知道在那种情况下使用多线程可能没有任何意义,但我只是想在Event用法上使用。

您会得到要求的行为。 您启动了两个线程,并且两个线程都在等待事件。 比您发出事件信号时,它们均会唤醒并开始(以随机顺序)访问全局变量yy1。 由于数据争用,最终导致的结果是完全未定义且行为不稳定。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM