我一直在寻找用于定义宏的GCC文档,它看起来像我想要的是不可能的,但我想如果是,有人在这里会知道.
我想要做的是定义这个宏:
synchronized(x) {
do_thing();
}
Run Code Online (Sandbox Code Playgroud)
其中扩展为:
{
pthread_mutex_lock(&x);
do_thing();
pthread_mutex_unlock(&x);
}
Run Code Online (Sandbox Code Playgroud)
在C++中,我可以创建一个SynchronizedBlock在其构造函数中获取锁定并在析构函数中解锁的对象,但我不知道如何在C中执行此操作.
我意识到我可以在表单中使用函数指针synchronized(x, &myfunction);,但我的目标是使一些C代码看起来尽可能像Java一样.是的,我知道这是邪恶的.
Joe*_*e D 16
编辑:改为nategoose的版本
#define synchronized(lock) \
for (pthread_mutex_t * i_#lock = &lock; i_#lock; \
i_#lock = NULL, pthread_mutex_unlock(i_#lock)) \
for (pthread_mutex_lock(i_#lock); i_#lock; i_#lock = NULL)
Run Code Online (Sandbox Code Playgroud)
你可以像这样使用它:
synchronized(x) {
do_thing(x);
}
Run Code Online (Sandbox Code Playgroud)
甚至没有牙套
synchronized(x)
do_thing();
Run Code Online (Sandbox Code Playgroud)
这是一个开始,但您可能需要调整它:
#define synchronized(lock, func, args...) do { \
pthread_mutex_lock(&(lock)); \
func(##args); \
pthread_mutex_unlock(&(lock)); \
} while (0)
Run Code Online (Sandbox Code Playgroud)
像这样使用(不幸的是,不是您想要的类似 Java 的语法):
synchronized(x, do_thing, arg1, arg2);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3108 次 |
| 最近记录: |