gpt4 book ai didi

c - A从C中的多个位置访问相同的信息

转载 作者:行者123 更新时间:2023-11-30 15:47:05 26 4
gpt4 key购买 nike

我希望能够调用两个函数,它们都使用存储在变量 FooBar 中的信息。然后,我有两个函数 FooBar,它们都对变量 FooBar 执行操作。 Foo 写入一个值,而 Bar 读取它。这些函数应位于库 (DLL) 中,向调用程序返回值。要访问的数据将是数组/指向数组、 double 和整数的指针的混合。

人们能够为我指明实现此类操作的正确方向吗?

或者我正在寻找如何以错误的方式获取数据,并且有更好的方法吗?

问候

最佳答案

基本方法是:

volatile my_int;

void foo(void)
{
my_int++;
}

void bar(void)
{
if (my_int)
...
else
...
}

但是,您想通过此实现什么目的?某种引用计数?或者 my_int 应该在库外部,因此需要“获取”?在这种情况下,您可能希望将指针传递给库或使用每次调用时传递的结构。

这取决于您的库代码是否需要具有某种内部状态。如果没有内部状态并且功能仅位于对 foo 和 bar 的调用中,那么您应该随其传递适当的数据。

否则,您可能需要一些库初始化代码,然后对缓冲区进行排队并注册用户程序中的回调函数,然后库将对其进行操作。

编辑:如果这个问题与竞争条件有关:

您需要能够原子地写入数据类型并原子地读取它。那么你只有一个非关键的竞争条件。如果您需要对对象、数组作为一个整体进行操作,那么您将需要使用互斥锁。锁需要是一种可以原子读/写的类型,然后函数 foo 将获取锁、编辑数据、释放锁。功能栏也会做同样的事情。在真正的并行系统上,您将需要硬件支持以及测试和设置命令,否则您仍然可能遇到活锁。

关于c - A从C中的多个位置访问相同的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17726957/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com