我希望能够调用两个函数,它们都使用存储在变量 say 中的信息FooBar
。然后我有两个函数Foo
和Bar
,它们都对变量执行操作FooBar
。Foo
在读取时写入一个值Bar
。这些函数旨在将值返回给调用程序的库 (DLL)。要访问的数据将是数组/指向数组、双精度和整数的指针的混合。
人们能否为我指出实现此类操作的正确方向?
或者我是否正在研究如何以错误的方式获取数据,并且有更好的方法来做到这一点?
问候
对此的基本方法是:
volatile my_int;
void foo(void)
{
my_int++;
}
void bar(void)
{
if (my_int)
...
else
...
}
但是,您想通过此实现什么目标?某种引用计数?还是 my_int 应该在库外部,因此需要“获取”?在这种情况下,您可能希望将指针传递给库或使用每次调用时传递的结构。
这取决于你的库代码是否需要有一些内部状态。如果没有内部状态并且功能仅存在于对 foo 和 bar 的调用中,那么您应该将适当的数据与其一起传递。
否则,您可能希望有一些库初始化代码,然后将缓冲区排队并从用户程序注册回调函数,然后库对其进行操作。
编辑:如果这个问题是关于比赛条件的:
您需要能够以原子方式写入数据类型并以原子方式读取它。那么你只有一个非关键的竞争条件。如果您需要对对象、数组作为一个整体进行操作,那么您将需要使用互斥(mutex)锁。锁需要是一种可以原子读/写的类型,然后函数 foo 将获取锁,编辑数据,释放锁。功能栏也会这样做。在真正的并行系统上,您将需要硬件支持以及测试和设置命令,否则您仍然会遇到活锁。