sem_wait失败,返回信息,argument error
昨天的一个问题今天终于找到了错误地方,
#pragma pack(1)
typedef struct{
uint16off_node;
list_node_t*head;
list_node_t*tail;
uint64len;
uint64max_len;
charkey[DEF_KEY_LEN];
sem_tsem;
pthread_mutex_tmutex;
}list_t;
#pragma pack()
这样一个结构的数据,当sem的值是0的时候,sem_wait函数执行都会失败,返回的错误信息是“argument error”,而执行同一时刻执行如sem_getvalue这样的函数却不会出错,如果当sem的值是>0时候,sem_wait就不会出错。
如果我list_t结构的#pragma pack(1)去掉,则一切OK,
不知道原因,求指点,谢谢!!!
[解决办法]
#pragma pack(1)
typedef struct{
uint16 off_node;
list_node_t* head;
list_node_t* tail;
uint64 len;
uint64 max_len;
char key[DEF_KEY_LEN];
sem_t sem;
pthread_mutex_t mutex;
}list_t;
#pragma pack()
你上面这样声明 是 按照 1个字节对齐
但是 sem_wait的参数是一个sem_t也就是一个unsigned int型,在你的结构体中,按照1个字节对齐之后,对齐进行初始化之后,sem所分配的值,对于sem_t类型的值来说是一个无效值,所以sem_wait的参数也就是一个无效值,从而失败
[解决办法]
《Windows核心编程》
[解决办法]
擦,赵大师,sem_wait是Linux下的