0
我開始使用x線程的貓鼬web服務器。 有沒有一種方法可以記錄所有x個線程都處於忙碌狀態,以便我可以根據需要增加線程數?獲取當前工作線程的Mongoose Web服務器
我開始使用x線程的貓鼬web服務器。 有沒有一種方法可以記錄所有x個線程都處於忙碌狀態,以便我可以根據需要增加線程數?獲取當前工作線程的Mongoose Web服務器
如果不改變貓鼬的代碼,這是不可能的。我想,例如,在mongoose.c
改變static void worker_thread(struct mg_context *ctx)
功能:
while (consume_socket(ctx, &conn->client))
,你可以考慮在輔助線程繁忙。close_connection(conn);
之後,工作線程可用於處理套接字隊列中的新事件。您可以使用該點來計算繁忙線程的數量。
由於diewie建議,您可以:
,做到:
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 ...
}
您應該使用互鎖遞增以避免在這方面的錯誤。 – jmucchiello