svn commit: r252411 - head/sys/sys

Ed Schouten ed at 80386.nl
Sun Jun 30 19:44:57 UTC 2013


Hi Tijl,

2013/6/30 Tijl Coosemans <tijl at coosemans.org>:
> I don't think you can use static inline. Standard library functions need
> to have external linkage, which means you have to implement them in libc.

First of all, I could be mistaken, so please correct me if I say
something wrong here.

If my memory serves me right, this requirement is part of POSIX -- not
ISO C. As this is interface is not yet part of any version of POSIX
and at least I am not in the possession of a draft of POSIX that
specified these functions, I think it would be unwise to add this to
the C library. I think there is nothing that would forbid us to use
static inline functions.

As C11 merely names these things "functions", I think using a static
inline function would currently be the wisest thing to do. To my
knowledge the current version of the code at least complies with the
standards at hand.

> I think you can just use unsigned char. Only the test-and-set and clear
> operations need to be atomic. Anything else (like copy-assignment)
> doesn't have to be atomic. Both clang and gcc have __atomic_test_and_set
> and __atomic_clear built-ins.

Ah, nice. I was unaware of the existence of these functions. I'll see
if I can switch our header to use that instead. Still, I think it's a
bit weird that the API provided by both Clang and GCC provides such a
poor abstraction. For example, if it weren't for our implementation of
Restartable Atomic Sequences, even unsigned char would not have been a
lockless type on ARMv5.

--
Ed Schouten <ed at 80386.nl>


More information about the svn-src-head mailing list