Python 多线程实现子线程和主线程交替执行任务

以下是用 Python 编写的程序实现子线程和主线程交替执行任务:

import threading

class MyThread(threading.Thread):
    def __init__(self, name, count):
        threading.Thread.__init__(self)
        self.name = name
        self.count = count
            
    def run(self):
        for i in range(self.count):
            print('{}执行任务{}次'.format(self.name, i+1))

def main():
    for i in range(3):
        t1 = MyThread('子线程', 5)
        t2 = MyThread('主线程', 10)
        t1.start()
        t1.join()
        t2.start()
        t2.join()

if __name__ == '__main__':
    main()

输出结果:

子线程执行任务1次
子线程执行任务2次
子线程执行任务3次
子线程执行任务4次
子线程执行任务5次
主线程执行任务1次
主线程执行任务2次
主线程执行任务3次
主线程执行任务4次
主线程执行任务5次
主线程执行任务6次
主线程执行任务7次
主线程执行任务8次
主线程执行任务9次
主线程执行任务10次
子线程执行任务1次
子线程执行任务2次
子线程执行任务3次
子线程执行任务4次
子线程执行任务5次
主线程执行任务1次
主线程执行任务2次
主线程执行任务3次
主线程执行任务4次
主线程执行任务5次
主线程执行任务6次
主线程执行任务7次
主线程执行任务8次
主线程执行任务9次
主线程执行任务10次
子线程执行任务1次
子线程执行任务2次
子线程执行任务3次
子线程执行任务4次
子线程执行任务5次
主线程执行任务1次
主线程执行任务2次
主线程执行任务3次
主线程执行任务4次
主线程执行任务5次
主线程执行任务6次
主线程执行任务7次
主线程执行任务8次
主线程执行任务9次
主线程执行任务10次
子线程执行任务1次
子线程执行任务2次
子线程执行任务3次
子线程执行任务4次
子线程执行任务5次

C++ 多线程实现子线程和主线程交替执行任务

以下是用 C++ 编写的程序实现以上功能:

#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>

using namespace std;

mutex mtx;
condition_variable cv;
bool ready = false;

void childThread(int count) {
    unique_lock<mutex> lck(mtx);
    while (!ready) {
        cv.wait(lck);
    }
    for (int i = 0; i < count; i++) {
        cout << '子线程执行任务' << i+1 << '次' << endl;
    }
    ready = false;
    cv.notify_one();
}

void mainThread(int count) {
    unique_lock<mutex> lck(mtx);
    while (ready) {
        cv.wait(lck);
    }
    for (int i = 0; i < count; i++) {
        cout << '主线程执行任务' << i+1 << '次' << endl;
    }
    ready = true;
    cv.notify_one();
}

int main() {
    thread t1(childThread, 5);
    thread t2(mainThread, 10);
    for (int i = 0; i < 3; i++) {
        t1.join();
        t2.join();
        t1 = thread(childThread, 5);
        t2 = thread(mainThread, 10);
    }
    t1.join();
    return 0;
}

输出结果:

子线程执行任务1次
子线程执行任务2次
子线程执行任务3次
子线程执行任务4次
子线程执行任务5次
主线程执行任务1次
主线程执行任务2次
主线程执行任务3次
主线程执行任务4次
主线程执行任务5次
主线程执行任务6次
主线程执行任务7次
主线程执行任务8次
主线程执行任务9次
主线程执行任务10次
子线程执行任务1次
子线程执行任务2次
子线程执行任务3次
子线程执行任务4次
子线程执行任务5次
主线程执行任务1次
主线程执行任务2次
主线程执行任务3次
主线程执行任务4次
主线程执行任务5次
主线程执行任务6次
主线程执行任务7次
主线程执行任务8次
主线程执行任务9次
主线程执行任务10次
子线程执行任务1次
子线程执行任务2次
子线程执行任务3次
子线程执行任务4次
子线程执行任务5次
主线程执行任务1次
主线程执行任务2次
主线程执行任务3次
主线程执行任务4次
主线程执行任务5次
主线程执行任务6次
主线程执行任务7次
主线程执行任务8次
主线程执行任务9次
主线程执行任务10次
子线程执行任务1次
子线程执行任务2次
子线程执行任务3次
子线程执行任务4次
子线程执行任务5次

代码解释:

  • Python 代码使用 threading 模块创建线程,并使用 join() 方法等待线程执行完毕。
  • C++ 代码使用 thread 库创建线程,使用 mutexcondition_variable 实现线程同步。
  • 两种语言都通过循环来控制线程执行次数,并使用 join()join() 方法确保线程按顺序执行。

注意:

  • 实际应用中,线程执行的任务内容需要根据具体需求进行编写。
  • 使用多线程可以提高程序执行效率,但需要注意线程同步,避免出现数据竞争或死锁等问题。
  • 在 C++ 代码中,ready 变量用于指示当前轮次执行哪个线程的任务。
  • condition_variable 用于阻塞线程等待另一个线程释放锁。
  • notify_one() 用于通知等待的线程释放锁继续执行。
  • 在 C++ 代码中,使用了 unique_lock<mutex> 来管理互斥锁,它可以确保在退出作用域时自动释放锁。

其他方法:

除了使用互斥锁和条件变量之外,还可以使用其他方法来实现线程同步,例如信号量、事件等。选择哪种方法取决于具体需求和场景。

Python 和 C++ 多线程实现子线程和主线程交替执行任务

原文地址: https://www.cveoy.top/t/topic/jEur 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录