【发布时间】:2017-01-01 05:13:44
【问题描述】:
所以这是我要解决的问题,我正在用 C 编程。
我们有一个函数可以为你初始化一个结构。
typedef struct {
int val1;
int val2;
} custom_t;
custom_t init_custom() {
custom_t temp;
temp.val1 = 5;
temp.val2 = 5;
return temp;
}
你会像这样使用它:
custom_t some_name = init_custom();
我有 4 个以 custom_t 作为输入的函数,可以用它做一些工作。
在另一个文件中,我有很多将在多线程环境中运行的库函数。无论线程如何,这些库函数都需要在同一个 custom_t 变量上工作。
库函数不会将 custom_t 变量传递给它,因为目标是其他用户应该能够使用库函数而无需考虑 custom_t 变量。
我在想我必须在定义库函数的命名空间中将 custom_t 变量设为全局变量,但我错误地说全局变量必须是 const。
我不确定如何实现这一点,我将不胜感激能获得的所有帮助。如果我的解释不够好,请随时提出任何问题,我会尽力详细说明。
编辑: 修正变量初始化错字
【问题讨论】:
-
C 不要求具有外部链接的变量为
const,因此无论您遇到什么错误,都必须针对特定的用法或上下文。如果您需要这方面的帮助,请提交 minimal reproducible example。 -
另一方面,我们确实希望在这里提出具体问题。 “我该如何处理
?”很少有资格。 -
您是否有可能调用将
init_custom分配给标题中的全局变量?否则:如果你有一个不是线程安全的库,并且你试图通过在你交给它的数据结构上实现线程安全来做到这一点,那么,通常事情不会很好地结束。您可以使访问足够安全,以至于没有人在其他人正在阅读的同时写入,但谁能说代码对访问结构不同部分的一致性和原子性的假设是什么?
标签: c multithreading shared-resource