1

我有一系列 c++ 批处理程序,它们同时运行并使用共享内存在它们之间传递数据。这些程序是为 Windows 和 UNIX 构建的,每个程序都使用信号量、互斥锁等适当的代码。

共享内存代码/库是多年前由一位顾问编写的,多年来一直完美无缺。

今年我们将编译器/操作系统升级到 VS2010 for windows 和 AIX 7。以前我们必须处理 10 多年前的编译器。

一切仍然有效,但我们遇到了严重的性能问题。在记录中,我已经缩小到发生延迟的地方。

对于 Windows,当我们执行 WaitForSingleObject(m_HANDLE, INFINITE); 对于 UNIX,当我们执行 semop(m_HANDLE,&sb,1);

我正在阅读这种类型的原始编码,而且进展缓慢。

我的问题是,有没有人知道现代操作系统和/或编译器会导致这种类型的编程比旧操作系统/编译器运行得慢的任何事情?

4

1 回答 1

0

我只是在这里猜测,但...

可能在旧编译器中,您使用的是非线程标准 c 库,并且您的代码对许多操作系统调用进行了手动线程锁定。

在新代码中,标准库现在默认是线程化的。对于新的标准库,您现在可能会锁定不必要的东西。我不确定 MSVC 甚至不再提供非线程安全的 std c 库。

于 2013-06-14T17:55:14.150 回答