malloc
将始终为您提供指向内存以用于对象的指针。但是,如果您习惯使用在堆栈上自动分配的对象,您可以随时使用指针,然后根据需要取消引用。
例如,如果您习惯:
mutex_t bar;
lock_mutex(bar);
unlock_mutex(bar);
相反,你会做
mutex_t *bar = malloc(sizeof(mutex_t));
lock_mutex(*bar);
unlock_mutex(*bar);
free(bar);
但是,我熟悉的所有 C 线程库都需要指针参数。例如,使用 pthreads,您可能会执行类似的操作
pthread_mutex_t foo;
pthread_mutex_init(&foo, NULL);
pthread_mutex_lock(&foo);
pthread_mutex_destroy(&foo);
这&foo
意味着您实际上已经将指针传递给foo
,所以如果foo
是指针,只需删除引用运算符。
pthread_mutex_t *foo = malloc(sizeof(pthread_mutex_t));
pthread_mutex_init(foo, NULL);
pthread_mutex_lock(foo);
pthread_mutex_unlock(foo);
pthread_mutex_destroy(foo);
free(foo);