如何从线程接收信息到主线程,然后将信息返回 / C 语言、pthreads、互斥锁

How to receive information from thread to main thread and then give information back / C language, pthreads, mutex

提问人:JaChceTylkoZdacStudia 提问时间:11/13/2023 更新时间:11/13/2023 访问量:35

问:

  • 线程数应由 #define NUM_THREADS 编号指定
  • 使用互斥锁或信号量的程序版本

编写一个程序,其中每个线程生成两个随机数。 然后主线程 ( int main() ) 计算各个线程生成的总和,并将信息传递给线程,以了解给定线程是赢了还是输了。最后,每个线程都会打印我赢了或输了的消息。

你能帮我如何正确地编写该任务吗?

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>

#define num_threads 5

pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; // Initialization and declaration of mutex

void* thread_function(void* arg) {
    int id = *(int*)arg;
    
    int number1 = rand() % 100;
    int number2 = rand() % 100;

    pthread_mutex_lock(&lock); // Lock the mutex

    // Your thread logic goes here

    pthread_mutex_unlock(&lock); // Unlock the mutex
}

int main() {
    srand(time(NULL));

    pthread_t threads[num_threads];
    int thread_ids[num_threads];

    // Creating threads
    for (int i = 0; i < num_threads; ++i) {
        thread_ids[i] = i;
        pthread_create(&threads[i], NULL, thread_function, (void*)&thread_ids[i]);
    }

    // Checking the sums generated by the threads

    // Waiting for the threads to finish
    for (int i = 0; i < num_threads; ++i) {
        pthread_join(threads[i], NULL);
    }

    return 0;
}

C 多线程 pthreads 互斥锁

评论

0赞 Marco Bonelli 11/13/2023
我怀疑任何人都能帮到你,要求非常模糊。你应该澄清“赢”或“输”是什么意思,并包括你到目前为止尝试过的东西,而不仅仅是给你的模板代码。
0赞 John Bollinger 11/13/2023
一般的援助请求(“你能帮我吗?”)对 SO 来说太宽泛了。我们回答更具体的问题。此外,我们通常希望看到您已经投入了一些思考和努力来为自己回答问题,但您在此处介绍的内容似乎只不过是提供给您的解决方案模板。我们也许能够帮助您解决您遇到的特定设计和实施问题,但我们不会为您做功课。
1赞 John Bollinger 11/13/2023
专业提示:学术练习通常借鉴课程中以前介绍的材料,尤其是最近涵盖的材料。您应该在那里寻找有关如何进行的想法。
0赞 Andrew Henle 11/13/2023
与您的问题无关,但诸如此类的评论没有用。这只是重申了从代码中显而易见的内容,该代码是一个带有初始化的声明。 是类似的 - 它不提供从代码中看不出的信息。更好的注释解释为什么,代码代表什么,或者做一些类似描述算法的事情// Initialization and declaration of mutexi++; // increment i
0赞 Craig Estey 11/13/2023
正如约翰所提到的,课程中可能有“隐含”的材料。否则,就不清楚什么是“赢或输”。主线程计算[给定线程中的两个数字]的总和,但线程“A”的“我赢了”是否意味着其总和大于线程“B”的总和?这个问题措辞不当。而且,如果您发布的内容正是讲师为您提供的骨架,则它具有未定义的行为,因为每个线程都会调用而不是randrand_r

答: 暂无答案