gpt4 book ai didi

c - C 编程中的线程 (linux)

转载 作者:太空宇宙 更新时间:2023-11-04 12:30:00 24 4
gpt4 key购买 nike

我必须编写一个程序,基本上是一个游戏 - 简而言之,有收集资源的士兵(线程),在基地卸载资源,训练自己和其他一些东西。我一直在阅读有关线程以及如何使用它们进行 6-7 小时的马拉松比赛的信息,但我认为我需要一些帮助。所以,我可以编写一个非常简单的程序,其中线程使用一个函数,假设一个函数打印“你好,我是线程号:N”。但是,我没有得到什么——例如,如果我们用 print 语句查找这个简单的程序,我们给每个线程一个指向该函数的指针,这一切都很有趣和游戏。但是,在我的情况下,我必须执行多个功能,而我没有得到的是如何让所有线程都通过所有不同的功能?主要思想是使用互斥体和 condvars,但由于我只能在其参数中为每个线程提供一个函数指针,所以我不知道如何完成这项任务,因为我有 3-4 个函数。我认为为每个函数创建一个线程并不能解决问题,原因如下:

Game begins!
Worker 1 is searching
Worker 1 is transporting
Worker 1 unloaded resources to Base station
Worker 2 is searching
Worker 2 is transporting
Worker 2 unloaded resources to Base stationW
Operation not supported
Worker 3 is searching
Worker 3 is transporting
Worker 3 unloaded resources to Base station
.....
b
Not enough resources
Worker 4 is searching
Worker 4 is transporting
Worker 4 unloaded resources to Base station
...
b
Worker 3 is constructing new building barracks
Worker 2 is searching
Worker 2 is transporting
Worker 2 unloaded resources to Base station
....
Worker 3 completed new building barracks
w
Warrior is being trained
Worker 3 is searching
Warrior is ready for duty

这一定是游戏的输出。不要介意 W 和 B - 只是一些必须满足特定条件才能运行的操作。所以我的问题是——我应该为每个函数使用一个线程吗?我不想让你解决我的问题,我只是很乐意告诉我应该如何处理这个问题,非常感谢!

最佳答案

每个线程都有一个开始运行的函数,但该函数可以调用其他函数。它类似于程序主线程开始运行的 main() 函数。

从您的示例输出来看,您似乎希望每个线程运行一个循环,重复执行一系列步骤(搜索、传输等)。每个步骤都可能涉及调用一个或多个其他函数。这些函数可以执行诸如阻塞条件变量以等待资源可用之类的操作。

相关说明:除了函数指针,pthread_create 只允许您将单个 arg 指针作为数据传递给线程。假设您的线程需要的信息不止一个指针,您需要创建一个 struct 来保存线程需要的任何信息,并将一个指针传递给它。

关于c - C 编程中的线程 (linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43545798/

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