gcc (GCC) 4.1.2
c89
你好,
决定在多线程应用程序中我需要在哪里进行锁定和解锁。
保持代码片段简短。我有一个全球渠道结构。IE
typedef struct tag_channel channel_t;
struct tag_channel {....};
我有 3 个函数使用 API 来设置和处理其消息队列上的通道。
我的主线程 #1 将调用此函数
apr_status_t set_ss7_channel_state(channel_t *channel)
{
/* API call to set channel - non-blocking ASYNC call that returns immediately
wait for event in evt_loop */
setChanState(channel);
}
事件循环在生成的线程 #2 中开始。其他功能可以触发相同的频道购买,将频道放入消息队列。
static void* APR_THREAD_FUNC evt_loop(apr_thread_t *thd, void *data)
{
while(is_looping) {
/* Get event and channel from message API message queue */
waitevt();
if(channel_process(channel) != TRUE) {
/* clean up */
}
}
}
从线程 #2 调用的进程通道
apr_status_t channel_process(channel)
{
/* process channel here based on the event
/* lock channel */
/* do some processing */
/* unlock channel */
}
因此,对于单个通道,基本上调用是这样工作的:
1) setChanState(channel) thread #1 -> puts channel on an API message queue
2) evt_loop(...) thread #2 will retrieve the event and the channel structure
3) process_channel(channel) will process the channel on thread #2
我想知道我是否需要阻止频道结构,因为该频道上可能还有其他事件?我已经对 channel_process 设置了阻塞。
非常感谢您的任何建议,