小编Gel*_*tor的帖子

Linux上的SetThreadPriority等价物(pthreads)

鉴于以下代码,我想知道在假设pthreads甚至使用Boost.Thread API的情况下,linux中的等效代码是什么.

#include <windows.h>

int main()
{
   SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_HIGHEST);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

c c++ linux winapi pthreads

13
推荐指数
3
解决办法
2万
查看次数

使用MSVS 2010和C++标准构建问题

我正在尝试构建,使用msvs 2010在以下git中找到的项目:

https://github.com/Joonhwan/exprtk

问题是当我在exprtk.hpp文件中注释掉48行'#define exprtk_lean_and_mean'时,我得到以下编译器错误:

Error   1   error C1128: number of sections exceeded object file format limit : compile with /bigobj
Run Code Online (Sandbox Code Playgroud)

谷歌搜索错误,似乎表明编译的翻译单元已编译为大于仲裁限制的东西,并且在命令行中添加'bigobj'应该解决问题(它会这样做).使用gcc(4.3)编译代码,没有任何故障.

我的问题是:

  1. c ++是否限制了翻译单元中可以使用的类型数量?

  2. 代码在这个项目中的布局方式是不好的做法?(谷歌搜索时我注意到很多boost库都有同样的问题,例如:Boost.Sprit)

c++ standards compiler-errors visual-c++

8
推荐指数
2
解决办法
4213
查看次数

IEEE-754浮点计算,相等和缩小

在以下代码中,函数foo1,foo2和foo3旨在等效.但是当运行foo3没有从循环终止时,是否有这种情况的原因?

template <typename T>
T foo1()
{
   T x = T(1);
   T y = T(0);
   for (;;)
   {
      if (x == y) break;
      y = x;
      ++x;
   }
   return x;
}

template <typename T>
T foo2()
{
   T x = T(0);
   for (;;)
   {
      T y = x + T(1);
      if (!(x != y)) break;
      ++x;
   }
   return x;
}

template <typename T>
T foo3()
{
   T x = T(0);
   while (x != (x + T(1))) ++x;
   return x;
} …
Run Code Online (Sandbox Code Playgroud)

c++ floating-point ieee-754 undefined-behavior

8
推荐指数
1
解决办法
518
查看次数

低延迟网络技术和银子弹

在对低延迟网络进行一些基本的谷歌搜索后,我提出了以下程序员和系统设计人员在开始低延迟网络时应该考虑的事项:

  1. 必须一起考虑硬件,系统和协议的设计

  2. 使用UDP而不是TCP开发协议并实现简单的ack-nak,在应用程序级别重新发送逻辑

  3. 减少从线路上消耗和打包数据的进程或线程的上下文切换次数(最好为零)

  4. 使用OS的最佳选择器(选择,kqueue,epoll等)

  5. 使用具有大量板载缓冲区(fifo)的高质量NIC和交换机

  6. 使用多个NIC,专门用于下游和上游数据流

  7. 减少其他设备或软件生成的IRQ数量(如果不需要,可以简单地删除它们)

  8. 减少互斥锁和条件的使用.而是尽可能使用无锁编程技术.利用架构的CAS功能.(无锁容器)

  9. 考虑单线程多线程设计 - 上下文切换非常昂贵.

  10. 理解并正确使用架构的缓存系统(L1/L2,RAM等)

  11. 希望完全控制内存管理,而不是委托给垃圾收集器

  12. 使用优质电缆,保持电缆尽可能短,减少扭曲和卷曲的数量

我的问题:我想知道在开始使用低延迟网络时,SOers认为其他什么是重要的.

请随意批评以上任何一点

c++ java networking low-latency

4
推荐指数
2
解决办法
2284
查看次数

在scoped_lock上解锁的无关紧要

在以下博文中:

http://www.justsoftwaresolutions.co.uk/threading/implementing-a-thread-safe-queue-using-condition-variables.html

有一个'推送'方法定义如下:

void push(Data const& data)
{
   boost::mutex::scoped_lock lock(the_mutex);
   the_queue.push(data);
   lock.unlock();
   the_condition_variable.notify_one();
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 为什么在scoped_lock变量上调用了一个显式的'lock.unlock()'?

  2. 它的目的是什么?

  3. 是否可以安全删除,导致'notify_one'方法调用在scoped_mutex的范围内?

c++ multithreading mutex condition-variable thread-safety

2
推荐指数
1
解决办法
750
查看次数