小编tee*_*pap的帖子

GCD调度并发队列冻结,崩溃日志中的"Dispatch Thread Soft Limit Reached:64"

我的程序是一个处理传入请求的服务器.每个有效请求都被包装NSOperation并传递给法线NSOperationQueue.

每个都NSOpearation处理它的请求.在某些情况下,NSDictionary我使用dispatch_queue(并发队列),dispatch_barrier_async(当设置值时)和dispatch_sync(当获取值时)存在争用,以使此NSDictionary线程安全.

我同时用100个请求测试我的程序,然后该过程有时冻结.我用SIGSEGV查看崩溃日志来终止进程.

大多数线程都停留在dispatch_sync此队列中.下面有一张纸条

达到调度线程软限制:64(同步操作中阻塞的调度线程太多)

这个音符到底意味着什么?它的行为是什么?我找不到有关此限制的信息.我该如何解决这个问题?

我可以想出两种可能的方法来避免这个问题.(我将测试它们并稍后更新)

  1. 使用dispatch_semaphore限制块提交给该并发队列.
  2. 限制maxConcurrentOperationCountNSOperationQueue

你有更好的解决方案吗?

multithreading grand-central-dispatch

6
推荐指数
1
解决办法
1513
查看次数

cscope是否具有搜索历史记录或搜索查询堆栈功能?

我通常用cscope从c方法挖掘方法到方法超过4-5级,我必须在方法之间来回切换.

如何在cscope中查看搜索历史记录,以便我不必记住以前的方法名称.或者如果它是一个堆栈会更好.

c cscope

4
推荐指数
1
解决办法
5169
查看次数

NSDate和双精度问题

这是代码

NSDate* d = [NSDate dateWithTimeIntervalSince1970:32.4560];
double ti = [d timeIntervalSince1970];
NSLog(@"Interval: %f %f %f %f",ti,32.4560,ti*1000.0,32.4560*1000.0);
Run Code Online (Sandbox Code Playgroud)

输出是

间隔期:32.456000 32.456000 32455.999970 32456.000000

为什么NSDate会返回失去一些精确度的值?

objective-c nsdate double-precision

4
推荐指数
1
解决办法
2844
查看次数

从const成员函数返回'this'作为非const

我想在Point下面的课上进行方法链接.

#include <iostream>

class Point {
  public:
    Point(int x, int y): _x(x), _y(y) {}

    Point& moveX(int x);
    Point& moveY(int y);
    Point& print() const;

  ...
};

...

Point& Point::print() const {
  std::cout << "(" << _x << "," << _y << ")" << std::endl;
  return *this;  // Compile fails
}
Run Code Online (Sandbox Code Playgroud)

我认为将其标记print()const成员函数是有意义的,因为它只是打印内部成员.但是,我想在非const和const函数之间进行方法链接,如下所示.

int main() {
  Point p(1,1);
  p.moveX(10).print().moveY(11); // method chaining
}
Run Code Online (Sandbox Code Playgroud)

所以我必须返回this非const,但它不能编译,因为在我的理解中,成员被标记为const包括thisconst成员函数.

在这种情况下,有没有办法进行方法链接?

c++ method-chaining

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