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

标签 c dll

我希望能够调用两个函数,它们都使用存储在变量 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/

相关文章:

c - 如何生成唯一的文件名?

dll - 使用全局程序集缓存提高速度

c# - 重载com可见dll中的方法

在 C 的多线程程序中创建随机数

c 中的 Char* 错误

c - 链表数据都一样

c# - 在 C# 中从 Go 调用函数

c# - Visual Studio 添加与 dll 同名的可执行文件

dll - 从 .NET DLL 调用 VB6 方法

函数内部的数组可以用函数的返回值初始化吗? "int arr[2]={strcmp("a","a"),strcmp ("3","5")};"对吗?