在Linux上,我需要找到当前配置的时区作为Olson位置.我希望我的(C或C++)代码可以移植到尽可能多的Linux系统.
例如.我住在伦敦,所以我现在的奥尔森位置是"欧洲/伦敦".我对时区ID 不感兴趣,比如"BST","EST"等等.
Debian和Ubuntu有一个/etc/timezone包含这些信息的文件,但我认为我不能依赖那个文件,我可以吗?Gnome有一个函数oobs_time_config_get_timezone()也返回正确的字符串,但我希望我的代码可以在没有Gnome的系统上运行.
那么,在Linux上获得当前配置的时区作为Olson位置的最佳通用方法是什么?
Windows和Solaris线程API都允许以"挂起"状态创建线程.线程实际上只在以后"恢复"时启动.我已经习惯了没有这个概念的POSIX线程,而且我很难理解它的动机.任何人都可以建议为什么创建一个"暂停"线程会有用吗?
这是一个简单的说明性示例.WinAPI允许我这样做:
t = CreateThread(NULL,0,func,NULL,CREATE_SUSPENDED,NULL);
// A. Thread not running, so do... something here?
ResumeThread(t);
// B. Thread running, so do something else.
Run Code Online (Sandbox Code Playgroud)
(简单的)POSIX等价似乎是:
// A. Thread not running, so do... something here?
pthread_create(&t,NULL,func,NULL);
// B. Thread running, so do something else.
Run Code Online (Sandbox Code Playgroud)
有没有人有任何现实世界的例子,他们能够在A点(在CreateThread和ResumeThread之间)做一些事情,这在POSIX上会很困难?
Microsoft文档没有提及如果我ReleaseMutex() 在互斥锁已经解锁时错误地调用会发生什么.
细节:
我试图修复一些Windows代码而无需访问编译器.
我意识到WinApi互斥体都是递归的,并且是引用计数的.如果我正在使用该功能,很明显额外的ReleaseMutex()调用会过早地减少参考计数器.
但是,我正在查看的代码不会递归使用互斥锁,因此引用计数永远不会高于"1".它确实释放了多次互斥量...所以会发生什么?引用计数是否为负数?它是否保持零(解锁)并返回一个可忽略的错误?
(当然,这个代码在调用这些函数时实际上并没有检查错误!)