C编程中的线程(linux)

C编程中的线程(linux),c,linux,multithreading,mutex,C,Linux,Multithreading,Mutex,我必须编写一个程序,基本上是一个游戏——简言之,有士兵(线程)收集资源,在基地卸载资源,训练自己和其他一些东西。我已经阅读了关于线程以及如何使用线程进行6-7小时的马拉松,但我想我需要一些帮助。因此,我可以编写一个非常简单的程序,其中线程使用一个函数,比如一个函数,它打印“hello i am thread number:N”。但是,我不明白的是——例如,如果我们用print语句查找这个简单的程序,我们给每个线程一个指向函数的指针,这一切都很有趣,也很有趣。但是,在我的例子中,我必须执行多个函数

我必须编写一个程序,基本上是一个游戏——简言之,有士兵(线程)收集资源,在基地卸载资源,训练自己和其他一些东西。我已经阅读了关于线程以及如何使用线程进行6-7小时的马拉松,但我想我需要一些帮助。因此,我可以编写一个非常简单的程序,其中线程使用一个函数,比如一个函数,它打印“hello i am thread number:N”。但是,我不明白的是——例如,如果我们用print语句查找这个简单的程序,我们给每个线程一个指向函数的指针,这一切都很有趣,也很有趣。但是,在我的例子中,我必须执行多个函数,而我没有得到的是如何让所有线程通过所有不同的函数?主要思想是使用互斥量和condvar,但是由于我可以在每个线程的参数中只给一个函数指针,我不知道如何完成这项任务,因为我有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\u create
只允许将单个
arg
指针作为数据传递给线程。假设您的线程需要的信息不止一个指针,那么您需要创建一个
结构来保存线程需要的任何信息,并传递指向该信息的指针。

将士兵等对象建模为线程是一个非常糟糕的主意。重新思考你的设计。这是我的任务,我必须这样做。这不是我的想法。所以基本上你是说为每个函数创建一个线程,循环直到满足一个条件并返回一些值?这让我想问,如果我有一个gatherResources函数,假设我得到5个资源,我如何将它存储为全局变量和/或返回到main?据我所知,使用pthread_ext(N)-在我们的例子中,N是5,然后在主pthread_join(threadName,[storeNhere])?请你向meNo解释一下,我是说为每个士兵创建一个线程,让它完成士兵需要做的所有事情-包括调用函数,如
gatherResources
deliverResources
,而且可能涉及到一个循环,因为焊料在交付第一批之后应该会收集更多的资源。如果我必须创造士兵呢?我是否应该为soldierCreation编写一个函数,使用一个线程,并在每次创建士兵时增加一个全局变量?创建士兵需要启动一个线程。你在代码中的具体位置,以及如何跟踪你创建的士兵,都取决于你自己。