【发布时间】:2014-10-17 11:35:41
【问题描述】:
我有一个使用文件描述符的线程,并且在取消时必须close() 文件描述符。伪代码如下:
static void thread_cleanup(void *args)
{
int *fd = (int *)args;
close(*fd);
}
void *thread(void *arg)
{
int fd = open(...);
...
pthread_cleanup_push(thread_cleanup, &fd);
....
}
我的一个选择是将fd 从thread 转换为void *,并让thread_cleanup 将其转换回int,但如果sizeof(int) != sizeof(void *) 可能会导致问题。我的问题是:以这种方式使用伪代码中的堆栈变量是否安全?
【问题讨论】: