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

A在C中从多个位置访问相同的信息,c,dll,C,Dll,我希望能够调用两个函数,它们都使用存储在变量中的信息,比如FooBar。然后我有两个函数Foo和Bar,它们都对变量FooBar执行操作Foo写入值,而Bar读取值。这些函数位于向调用程序返回值的库(DLL)中。要访问的数据将混合使用数组/指向数组的指针、double和int 人们能否为我指明实现这一行动的正确方向 或者我正在考虑如何以错误的方式获取数据,还有更好的方法吗 关于这方面的基本方法是: volatile my_int; void foo(void) { my_int++;

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

人们能否为我指明实现这一行动的正确方向

或者我正在考虑如何以错误的方式获取数据,还有更好的方法吗


关于

这方面的基本方法是:

volatile my_int;

void foo(void)
{
    my_int++;
}

void bar(void)
{
    if (my_int)
        ...
    else
        ...
}
但是,您希望通过此实现什么?某种引用计数?还是我的智力应该在图书馆之外,因此需要“获得”? 在这种情况下,您可能希望向库传递指针,或者使用每次调用传递的结构

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

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

编辑:如果此问题与比赛条件有关:

您需要能够以原子方式写入数据类型,并以原子方式读取它。那么你只有一个非临界竞速条件。 如果需要对对象、数组作为一个整体进行操作,则需要使用互斥(mutex)锁。 锁需要是一种可以自动读/写的类型,然后函数foo将获取锁,编辑数据,释放锁。功能条也会这样做。
在真正的并行系统上,您需要硬件支持以及测试和设置命令,或者您仍然可以运行到活动锁。

我缺少什么?为什么不能将FooBar作为一个参数发送?因为据我所知,如果同时尝试读写,数据很可能会被破坏。例如,我将向DLL传递一个指向数字数组的指针,DLL然后执行一些迭代函数,在运行时,我希望根据函数所处的迭代,获得一些数据质量的度量。希望能澄清一下。我想在很大程度上,我不确定C中是否存在互斥,而不是C++。然而,我试图理解的是,在每一步中处理信息和获取度量的最佳方式是什么,这样我就可以在迭代执行时绘制迭代的进度。首先,你需要一个相当大的数据集,这才有意义。第二,互斥不是C++的原生,也不是C.的应用程序以你想要的方式工作,你可能不得不排队一些缓冲区来统计数据并使用回调。所以用户逻辑队列buffer0,buffer1。库填充缓冲区0,调用回调,这将取消缓冲区0的队列,将新缓冲区2的队列。在处理回调时,库填充buffer1,然后调用回调,依此类推。