linux与windows下多线程work模式实现

本文对比了Linux和Windows平台下工作队列的实现方式,包括互斥锁、条件变量等关键技术的运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

linux平台


int WorkQueue::AddWork(Work* work) {
    printf("WorkQueue::AddWork\n");
    pthread_mutex_lock(&mutex);
    works.push_back(work);
    pthread_cond_signal(&cond);
    pthread_mutex_unlock(&mutex);
    return 0;
    // TODO: Íê³É´úÂë
}

Work* WorkQueue::GetWork() {
    // TODO: Íê³É´úÂë
    printf("WorkQueue::GetWork\n");
    pthread_mutex_lock(&mutex);
    while(works.empty()){
        if(shutdown){
            pthread_mutex_unlock(&mutex);
            return NULL;
        }
        printf("pthread_cond_wait ing...\n");
        pthread_cond_wait(&cond, &mutex);

        printf("pthread_cond_wait done \n");
    }
    Work* getwork = works.front();
    works.pop_front();
    pthread_mutex_unlock(&mutex);
    return getwork;
}




windows平台:

int WorkQueue::AddWork(Work* work) {
    printf("WorkQueue::AddWork\n");
    WaitForSingleObject(hMutex, INFINITE);
    printf("add a work \n");
    works.push_back(work);
    
    SetEvent(hEvent);//single only one
    
    ReleaseMutex(hMutex);
    return 0;
    // TODO: 完成代码
}

Work* WorkQueue::GetWork() {
    // TODO: 完成代码
    printf("WorkQueue::GetWork\n");
    WaitForSingleObject(hMutex, INFINITE);
    while(works.empty()){
        if(shutdown){
            ReleaseMutex(hMutex);
            SetEvent(hEvent);
            return NULL;
        }
        printf("pthread_cond_wait ing...\n");
        SignalObjectAndWait(hMutex, hEvent, INFINITE, FALSE);
        WaitForSingleObject(hMutex, INFINITE);
    }
    printf("get a work \n");
    Work* getwork = works.front();
    works.pop_front();
    
    ReleaseMutex(hMutex);
    return getwork;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值