#include <pthread.h>
pthread_mutex_t* mut;
int main()
{
mut = PTHREAD_MUTEX_INITIALIZER;
}
以上代码吐出error: expected expression before ‘{’ token
。
#include <pthread.h>
pthread_mutex_t* mut = PTHREAD_MUTEX_INITIALIZER;
int main()
{
}
上面的代码吐出警告:标量初始化器周围的大括号
那么我应该如何初始化互斥锁呢?
答案 0 :(得分:7)
这是类型错误,您应该使用:npm WARN retry will retry, error on last attempt: Error: EBUSY: resource busy or locked, rename 'D:\Users\Subho\AppD ata\Local\Temp\npm-9484-8858437e\registry.npmjs.org\electron-to-chromium\-\electron-to-chromium-1.3.13.tgz.111430805 1' -> 'D:\Users\Subho\AppData\Local\Temp\npm-9484-8858437e\registry.npmjs.org\electron-to-chromium\-\electron-to-chr omium-1.3.13.tgz'
npm ERR! Windows_NT 10.0.14393
npm ERR! argv "D:\\Program Files\\nodejs\\node.exe" "D:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "--global" "vue-cli"
npm ERR! node v6.10.3
npm ERR! npm v3.10.10
npm ERR! tarball.destroy is not a function
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR! <https://github.com/npm/npm/issues>
npm WARN retry will retry, error on last attempt: Error: EBUSY: resource busy or locked, rename 'D:\Users\Subho\AppD ata\Local\Temp\npm-9484-8858437e\registry.npmjs.org\electron-to-chromium\-\electron-to-chromium-1.3.13.tgz.311380074 4' -> 'D:\Users\Subho\AppData\Local\Temp\npm-9484-8858437e\registry.npmjs.org\electron-to-chromium\-\electron-to-chr omium-1.3.13.tgz'
npm ERR! Windows_NT 10.0.14393
npm ERR! argv "D:\\Program Files\\nodejs\\node.exe" "D:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "--global" "vue-cli"
npm ERR! node v6.10.3
npm ERR! npm v3.10.10
npm ERR! tarball.destroy is not a function
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR! <https://github.com/npm/npm/issues>
而不是pthread_mutex_t
:
pthread_mutex_t*
编译器抱怨的原因是尝试将pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;
的宏扩展分配给指针:
PTHREAD_MUTEX_INITIALIZER
使用更正后的方法,您可以在{ { 0, 0, 0, 0, 0, __PTHREAD_SPINS, { 0, 0 } } }
所需的任何地方传递&mut
。
答案 1 :(得分:2)
首先,您应该将其声明为pthread_mutex_t
而不是指针pthread_mutex_t *
。您还应该确定互斥锁是函数的全局函数还是本地函数。
如果它是全局的,您可以使用以下内容对其进行初始化:pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;
如果是本地的,您必须致电:pthread_mutex_init(&mut,NULL);
(您必须检查返回值)
请注意,PTHREAD_MUTEX_INITIALIZER
是一个宏,您无法将其指定给指针。
来自pthread_mutex_init()
手册页:
只有互斥锁本身可用于执行同步。该 在调用中引用互斥锁副本的结果 pthread_mutex_lock(),pthread_mutex_trylock(),pthread_mutex_unlock(), 和pthread_mutex_destroy()未定义。 尝试初始化已初始化的互斥锁导致 未定义的行为。
通常,如果要将属性设置为锁(函数的第二个参数),例如进程之间的可共享或递归,则使用带有函数调用的方法。