在我的程序中,我使用一个线程池来分配我的所有任务,例如计时器任务,非阻塞套接字I/O等。任务实际上是一个回调函数,将在收到特定事件时执行。
该体系结构是:
这是问题所在:
我可以为计时器任务添加锁,但是应该在哪里放置锁?我无法将锁对象放置在计时器任务结构中,因为当我决定释放任务对象时,我必须已经获取了锁(释放和保持的锁),这可能导致未定义的行为:
pthread_mutex_lock(T->mutex);
free(T);
/*without a pthread_mutex_unlock(T->mutex);*/
如果另一个线程被阻塞,会发生什么:
pthread_mutex_lock(T->mutex);
如果不解决这些问题,我将无法继续工作。请帮助我!
我应该在单个进程中为不同类型的任务使用单独的线程池吗?还是只使用单线程?
任何建议表示赞赏!
最佳答案
您可以使用受其自身的互斥锁保护的全局计时器表。该表实际上不需要是全局的,但可以属于某个集合,例如拥有您正在执行I/O的所有内容的任何集合。
然后使用以下逻辑:
要创建计时器:
要触发计时器:
要取消计时器:
关于c - 服务器架构难题,C编程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12456267/