I have a C library that defined a bunch of platform specific macros for atomic operations. How can I use std::atomic as the implementation for this?
For example the C code has:
#define mylib_atomic_int_add(_pi, _val) do_atomic_int_add(_pi, _val)
int number = 0;
mylib_atomic_int_add(&number, 7);
And the C++ platform abstraction layer (i.e a static library compiled as C++11 that is linked with the C code) has:
extern "C"
{
int do_atomic_int_add(volatile int* i, volatile int v)
{
return *i + v;
}
}
Obviously this isn't safe because it isn't atomic, since the int is declared in the C code std::atomic can't be used there, but is there some way to use it within do_atomic_int_add()? like return std::atomic<int>::add(*i, v);?
Edit:
I don't know why no one understands what I'm trying to do. Its basically how do I atomically increment an int in C++ which has been passed over from a C function.
Aucun commentaire:
Enregistrer un commentaire