【问题标题】:Multithreading in C with CLion (Windows)带有 CLion 的 C 中的多线程(Windows)
【发布时间】:2020-07-06 00:05:51
【问题描述】:

我有一段代码非常耗时(~2s),并且可以在最后一个没有完成的情况下执行。

for (x = last; x <= end && !found; x++) {
  found = combine(combinaciones, x, end, &current);
}

注意combine() 是我所说的函数。但是在循环再次开始之前(因为它在另一个循环中),所有函数都必须完成。

另外,combine() 接收一些参数,combinaciones 是一个指针,current 是一个整数(通过引用)。整数随着时间的推移而被修改(并且必须在其他活动函数上进行修改)并且combinaciones 它是一个链表(其大小为current-1)。第二个和第三个参数只是整数。返回它是一个终止循环的布尔值,但我不关心他们是否进行了一些额外的操作。

我强调current 的重要性。如果 current 等于 5,则将创建 combinaciones 的第 5 个元素,然后 current 将是 6。我的意思是,如果两个函数正在分配内存,它们不会分配到相同的位置。

如果做不到,我可以并行执行这些操作,然后在main() 上分配内存。

所以,我开始搜索多线程并找到了&lt;pthread.h&gt;,但它只适用于 Linux(不适用于 CLion)。我找到了一些caled fork,我也不知道是否可以使用。 能否告诉我一个 Windows 多线程 API 以及示例和 CLion 实现?

代码很大,我认为这不会有太大帮助,我已经说过应该足够了。但是,如果有不清楚的地方,请告诉我。代码本身发布在GitHub,但它拥有的(少数)cmets 是西班牙语。

感谢您的帮助!

【问题讨论】:

  • 你应该只使用 Wsl 并使用 wsl 工具链,更多请看这里:jetbrains.com/help/clion/…
  • @Singh 好的,现在pthread.h 可以工作,但我仍然没有代码。我会尝试自己做,如果我成功了,我会更新帖子。
  • 这可能对你有帮助:stackoverflow.com/a/11624560/9386720
  • 关于:typedef unsigned char *Encrypted;typedef 语句中隐藏指针是一种非常糟糕的编程习惯
  • 关于:typedef struct { 大多数调试器使用结构tag 名称来访问结构中的各个字段。因此,强烈建议给结构一个tag 名称

标签: c windows multithreading parallel-processing clion


【解决方案1】:

使用 Wsl(正如 @Singh 所说)我可以使用 pthread.h。然后我只是调整了我的代码。我遇到的一个非常烦人的错误是“ID”(current 变量)被非连续分配(第一个线程有“3”,第二个线程有“2”)。我能够通过使用全局变量 (pthread_mutex_t) 和 pthread_mutex_lock()pthread_mutex_unlock() 来修复它。有关更多信息,您仍然可以在GitHub 上查看我的代码。

【讨论】:

  • 我很高兴你自己解决了你的问题,我很早就忘了告诉你关于 pthread 互斥锁的事情,但我很高兴你知道了 ;)。
猜你喜欢
  • 1970-01-01
  • 2021-02-06
  • 1970-01-01
  • 1970-01-01
  • 2014-04-02
  • 2016-06-06
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
相关资源
最近更新 更多