0

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

人们能否为我指出实现此类操作的正确方向?

或者我是否正在研究如何以错误的方式获取数据,并且有更好的方法来做到这一点?

问候

4

1 回答 1

1

对此的基本方法是:

volatile my_int;

void foo(void)
{
    my_int++;
}

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

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

这取决于你的库代码是否需要有一些内部状态。如果没有内部状态并且功能仅存在于对 foo 和 bar 的调用中,那么您应该将适当的数据与其一起传递。

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

编辑:如果这个问题是关于比赛条件的:

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

于 2013-07-18T15:05:28.860 回答