gpt4 book ai didi

c - C 中的 3 个线程之间交替

转载 作者:行者123 更新时间:2023-11-30 15:28:26 26 4
gpt4 key购买 nike

我有 3 个线程执行独立任务。我正在尝试模拟上下文切换,即我希望第一个线程暂停其执行并运行第三个线程,然后在一段时间后希望第三个线程暂停其执行并运行第二个线程等等

我当前有以下代码:

if ((result = pthread_mutex_init(&mutex, NULL)) != 0) {
perror("Error initializing mutex.");
}

for (i = 0; i < 3; i++) {
int rc = pthread_create(&threads[t], NULL, run_process,
(void *) processes[i]);
}
}

运行进程:

void* run_process(void * process_data) {

pthread_mutex_lock(&mutex);
Process pdata = (Process *) process_data;
int result;

printf("Job %d started.\n", order);

// do some work
// the mutex lock makes sure only one thread is here at a time
for (i = 0; i < (0xFFFFFFFF); i++);

printf("Job %d finished.\n", order);
pthread_mutex_unlock(&mutex);
}

这些进程将独立工作和运行,不会被其他线程中断。现在我想实现一个上下文切换器,当线程 1 正在执行其“工作”时,它将暂停并从线程 1 切换到线程 2,然后返回线程 1 并恢复其执行。

我对线程完全是新手,不知道如何实现它。任何帮助将不胜感激。谢谢!

最佳答案

使用pthread_cond_wait ,这将允许线程休眠并且 pthread_cond_signal唤醒特定线程。

线程 1 等待:

pthread_mutex_lock( &mutex1 ) ;

pthread_mutex_wait( &cond1 , &mutex1 ) ;

pthread_mutex_unlock( &mutex1 ) ;

线程 2 向线程 1 发送信号以继续:

pthread_mutex_lock( &mutex1 ) ;

pthread_mutex_signal( &cond1 ) ;

pthread_mutex_unlock( &mutex1 ) ;

如果您希望任何线程唤醒其他线程,则每个线程都需要一个共享互斥锁和一个条件。

关于c - C 中的 3 个线程之间交替,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26578894/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com