尝试使用一些代码来利用 C 中的多线程
Posted
技术标签:
【中文标题】尝试使用一些代码来利用 C 中的多线程【英文标题】:Trying out with some code to make use of multithreading in C 【发布时间】:2022-01-13 06:42:52 【问题描述】:我有一个可以产生任意数量线程的应用。所以我希望这段代码变成多线程的
void *some_thread_fuction(void *param)
struct some_struct *obj=(struct some_struct *)param;
int m=obj->m;
int n=...
double t[m+2][n+2]=0;
for (i=0; i <= m+1; i++)
for (j=0; j <= n+1; j++)
t[i][j] = 30.0;
for (i=1; i <= m; i++)
t[i][0] = 40.0;
t[i][n+1] = 90.0;
for (j=1; j <= n; j++)
t[0][j] = 30.0;
t[m+1][j] = 50.0;
memcpy(global_t,t,...);
我有一个简单的推理问题,为什么我喜欢让它成为一个多线程程序。但这是有道理的,因为如果我有 5 个线程(假设我在程序参数中在程序启动时产生多少线程)并且 n=20 m=20 也在程序启动时作为参数输入,那么我可以尝试工作在一个线程中为 0-4,在第二个线程中为 5-8,依此类推,直到第一个循环的最后一次迭代中为 16-20(只是一个示例,因为 m=etc n=etc 和线程数可以是用户提供的任何值)。
但更重要的是,我很难理解如何剖析三个for
循环,以将处理工作量分配给多个线程,以完成此代码中的所有循环。这是一个简单的代码,所以它只是一个真实的例子,我很难理解如何在这个场景的线程程序的代码中完成它。
【问题讨论】:
所以你想产生线程并在矩阵中给出开始和结束偏移作为线程参数? @kiner_shah 听起来你明白。感谢您的评论 @kiner_shah 很简单 【参考方案1】:将这段代码移动到一个函数中:
for (i=0; i <= m+1; i++)
for (j=0; j <= n+1; j++)
t[i][j] = 30.0;
如下:
void initialize(double t[], int start_i, int end_i, int n)
for (i=start_i; i <= end_i; i++)
for (j=0; j <= n+1; j++)
t[i][j] = 30.0;
然后您可以将区间 [0 m+1] 拆分为 5 个区间,并为每个区间从每个线程调用初始化函数。
也就是说,必须有更有效的方法来使用一些复制指令来实现相同的目标。
【讨论】:
请告诉我是否需要自己实现 40 90 50 的功能。你把它留给我做练习了吗?或者我可以使用相同的功能来编辑我认为的值。 好吧,我相信你明白了。以上是关于尝试使用一些代码来利用 C 中的多线程的主要内容,如果未能解决你的问题,请参考以下文章