26 lines
571 B
C++
26 lines
571 B
C++
#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;
|
|
}
|