多线程中的任务顺序

问题描述 投票:0回答:1

我是线程和多线程的新手。(Win 套接字 API) 我正在尝试通过适当的同步来实现 2 个线程中的任务序列。

不。线程 2 的数量:Thread_A 和 Thread_B

Thread_A{
    
    print task_A
    
    print task_D
}

Thread_B{
    
    print task_B
    
    print task_C
}

预期输出应该是 print task_A 、 print task_B 、 print task_C 、 print task_D 。

我需要使用 2 个信号量还是可以使用 1 个??

Thread_A{

while(1){

    wait semaphore

           print task_A

    release semaphore
        
    wait semaphore

           print task_D

    release semaphore
}

}

Thread_B{

while(1){

       wait semaphore

           print task_B
    
           print task_C

      release semaphore

}

}

第一次是A、B、C、D,但第二次是B、C、A、B

multithreading mutex semaphore winsockets
1个回答
0
投票

当您的程序启动这两个任务时,什么保证

Thread_A
将在
Thread_B
获取信号量之前获取信号量?当然,您的程序中没有任何内容(至少您所展示的程序部分中没有任何内容)可以保证这一点。

而且,当

Thread_A
释放信号量并立即尝试再次获取它时,什么保证
Thread_B
会首先获得它?再说一次,你的程序中没有任何东西可以做到这一点。

本质上,您像互斥体一样使用信号量,并且无法使用互斥体实现这种排序。

我需要使用 2 个信号量吗...?

这就是我会做的。例如,我有task_A

release
task_B的信号量来表明轮到task_B运行,然后task_A将
acquire
它自己的信号量再次等待它自己的轮次。


但是请注意!

当您以这种方式使用两个或多个线程时,每个线程都轮流等待,并且没有两个线程同时做任何有趣的事情,那么完全违背了多线程的目的。创建线程的唯一原因是它可以在程序中的其他线程执行其操作时同时执行某些操作。

*即使它只是等待用户的输入或等待来自远程网络主机的消息,这仍然是线程可以在其他线程执行其操作的同时执行的“操作”。

© www.soinside.com 2019 - 2024. All rights reserved.