【发布时间】:2021-04-15 04:23:19
【问题描述】:
提醒一下,这个项目是针对一所学校的,我对 C 和多线程都很陌生。
我正在尝试使用多个线程对输入列表中的每对无序文件运行统计分析函数。我需要接受用户输入的运行线程数。
按照我目前设置程序的方式,我已经创建了一个结构数组,其中包含必须进行的每个比较的文件名,如下所示:
typedef struct JSD {
float distance;
char * name1;
char * name2;
int w_cnt;
};
我在想,与其创建一个单独的队列结构来保存所有比较的列表,我可以简单地遍历整个数组,为每个元素创建一个线程,然后将结果输出回数组。我的信念是,通过这种方法,我不必像保护队列那样保护数组结构,因为每个线程一次只能处理一个单一的元素。我知道线程创建是 CPU 密集型过程,但这对我来说目前并不是一个主要问题。
但是,如果在继续遍历我的数组时已经达到预定义的线程限制,我不确定如何防止额外的线程实例。我的想法是创建一个变量来跟踪当前正在运行的线程数,但该数字显然需要限制其访问以防止出现竞争条件。我想知道互斥体或信号量是否能够实现这一点。
其中任何一个都能够实现我想要做的事情吗?我对每一个都不是很熟悉,所以如果他们能提供任何关于设置的指导,我将不胜感激。或者我错了不需要保护我的阵列,我应该排队。 任何指导将不胜感激。
【问题讨论】:
标签: c multithreading mutex semaphore