| #if defined(__clang__) |
| #define THREAD_ANNOTATION_ATTRIBUTE_(x) __attribute__((x)) |
| #else |
| #define THREAD_ANNOTATION_ATTRIBUTE_(x) |
| #endif |
| |
| #define CAPABILITY(x) THREAD_ANNOTATION_ATTRIBUTE_(capability(x)) |
| #define ACQUIRE() THREAD_ANNOTATION_ATTRIBUTE_(acquire_capability()) |
| #define RELEASE() THREAD_ANNOTATION_ATTRIBUTE_(release_capability()) |
| |
| class CAPABILITY("mutex") Mutex { |
| public: |
| void lock() ACQUIRE(); |
| void unlock() RELEASE(); |
| }; |
| |
| void Mutex::lock() ACQUIRE() {} |
| void Mutex::unlock() RELEASE() {} |
| |
| int main() { |
| Mutex m; |
| m.lock(); |
| m.unlock(); |
| return 0; |
| } |