我有一系列c ++批处理程序,它们同时运行并使用共享内存在它们之间传递数据。这些程序是为Windows和UNIX构建的,每个程序都使用信号量,互斥量等代码。
共享内存代码/库是多年前由一名顾问编写的,并且多年来一直运行良好。
今年我们将编译器/操作系统升级到适用于Windows和AIX 7的VS2010。之前我们不得不使用10年以上的编译器。
一切仍然有效,但我们遇到了严重的性能问题。在日志记录方面,我已经缩小到发生延迟的地方。
对于Windows,我们做WaitForSingleObject(m_HANDLE,INFINITE); 对于UNIX,当我们进行semop时(m_HANDLE,& sb,1);
我正在阅读这种原始编码,但进展缓慢。
我的问题是,是否有人知道现代操作系统和/或编译器方面的任何内容会导致此类编程比旧操作系统/编译器运行速度慢?
答案 0 :(得分:0)
我只是在猜这里......但是
可能在旧的编译器中,您使用的是非线程标准c库,并且您的代码是针对许多操作系统调用的手动线程锁定。
在新代码中,标准库现在默认为线程化。对于新标准库,您现在可以锁定不必要的东西。我不确定MSVC是否会再提供非线程安全的std c libs。