2012-05-08 60 views

回答

2

如果不改變貓鼬的代碼,這是不可能的。我想,例如,在mongoose.c改變static void worker_thread(struct mg_context *ctx)功能:

  1. 雖然工作線程是while循環裏面while (consume_socket(ctx, &conn->client)),你可以考慮在輔助線程繁忙。
  2. close_connection(conn);之後,工作線程可用於處理套接字隊列中的新事件。

您可以使用該點來計算繁忙線程的數量。

1

由於diewie建議,您可以:

  • 添加 「詮釋num_idle」 的結構mg_context
  • 在consume_socket

    ,做到:

    ctx->num_idle++; 
    
    // If the queue is empty, wait. We're idle at this point. 
    while (ctx->sq_head == ctx->sq_tail && ctx->stop_flag == 0) { 
        pthread_cond_wait(&ctx->sq_full, &ctx->mutex); 
    } 
    
    ctx->num_idle--; 
    assert(ctx->num_idle >= 0); 
    if (ctx->num_idle == 0) { 
        ... your code ... 
    } 
    
+0

您應該使用互鎖遞增以避免在這方面的錯誤。 – jmucchiello