如果当前拥有锁的线程试图获取它,Windows Mutex似乎允许再次(递归地)获取获取的锁.
但是,基于posix的pthread锁不允许这样的行为.
是否有任何编译时宏或任何可以使windows互斥量与pthread互斥量相同的设置?
如果进程执行导致内存碎片,我们可以使用哪些机制来检测?
有没有相同的工具?对使用"C"代码并可在Windows,Linux和VxWorks上运行的工具的建议将会有所帮助.
我是否需要在编译期间添加_REENTRANT宏以使我的errno线程安全?
如果不是,所有版本的gcc/linux/solaris都是这种情况,还是某些旧版本需要它?
我最近测试了一段没有使用_REENTRANT的代码,并发现errno在多线程环境中的未定义fahsion中运行?但是,在添加_REENTRANT后,一切正常.环境是Solaris.
但是,这里的讨论似乎并没有说必须添加_REENTRANT.我有点困惑.
另外,除了_REENTRANT之外,我应该添加任何其他选项或库以确保我的应用程序具有线程安全错误吗?
我有一些代码是这样的(这不是生产代码.只是一个示例代码)
char *inbuf = NULL;
inbuf = buf; //buf is some other valid buffer of size 100.
func(&inbuf);
.....
void func(char **p)
{
...
(*p)++;
...
}
Run Code Online (Sandbox Code Playgroud)
Coverity Tool表示"使用&inbuf获取地址会产生单身人士".我听说过关于C++的单例一词.但是,单例指针在C方面意味着什么呢?
pthread支持使用PTHREAD_MUTEX_INITIALIZER静态初始化pthread_mutex_t.
是否有可能使用Windows互斥锁为互斥初始化实现类似的静态机制?
我有一些这样的场景:
产品 - >平台 - > mylibs(版本-1)
产品 - > mylibs(版本-2)
即产品直接使用mylibs(版本-2).产品还使用平台(也是动态库),平台使用我的库(版本-1).
产品和平台使用的库的名称是相同的.只有版本不同,这两个版本都不兼容.
有没有办法在Linux中使用".so"库,平台可以链接到一个版本,产品可以链接到同一个同名库的另一个版本?
根据我的理解,C库必须与编译器一起分发.例如,GCC必须分发它自己的C库,Forte必须分发它自己的C库.我的理解是否正确?
但是,使用GCC编译的用户库是否可以与Forte C库一起使用?如果系统中存在两个C库,那么在运行时会调用哪一个?
此外,如果一个应用程序链接到多个库,一些用GCC编译,一些用Forte编译,那么用GCC编译的库会自动链接到GCC C库,并且它对Forte的行为也是如此.
CPU进程的含义是什么意思?
如何衡量呢?
有什么方法可以减少它?
我一直对这个概念感到困惑.我试图在Linux中使用'top'命令来测量使用的CPU.但是,我注意到的是,当没有其他用户进程在运行时,我的进程似乎会在I/O中没有阻塞时占用99%的CPU.但是,如果还有其他进程在运行,则会达到45%或50%.当没有其他进程在运行时,进程占用99%的CPU是否可以接受?
方向上的任何链接或指针也会有所帮助.