问题背景:
最近在学习Linux的多线程和线程池,在调试用C写的一段线程池代码的过程中,出现了一个错误(只截了关键部分):
Thread 2 "ThreadPool.out" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7ffff77c2700 (LWP 4298)]
0x00005555555555fa in manager (arg=0x0) at /home/syl/projects/ThreadPool/threadpool.c:246
246 while (!pool->shutdown)
Segmentation fault
大意是说在246行的while (!pool->shutdown)处出现了段错误。(图中是修改过的所以显示250,可忽略)
这里说明一下246行附近写了什么:
void* manager(void* arg)
{
ThreadPool* pool = (ThreadPool*)arg;
while (!pool->shutdown) // 246行处
{
...
}
return NULL;
}
首先来了解一下什么是段错误。(懂的可以略过)
段错误(Segm