pthread_join等待的个数,即停止4个线程便释放一块空间,所以pthread_join时需加锁,之后便需对线程句柄置空
2015-04-15 15:07
501 查看
// glibc源码指出
// __builtin_expect (result->stackblock_size > 4 * size, 0) ;// allocatestack.c:209显示
// 以下代码,当为4个线程时没有问题,当有5个线程时,报段错误
#include <stdio.h>
#include <pthread.h>
#define MAX_THREADNUMBER 4 // 5
static void *func(void *arg)
{
int flag = *(int*)arg;
while( *(int*)arg == 0 )
{
int i = 0;
}
return NULL;
}
int main()
{
int flag = 0;
int i = 0;
pthread_t threads[MAX_THREADNUMBER] = {0};
for ( i = 0; i < MAX_THREADNUMBER; i++ )
{
pthread_create( &(threads[i]), 0, func, &flag );
}
sleep( 3 );
flag = 1;
for ( i = 0; i < MAX_THREADNUMBER; i++ )
{
pthread_join( threads[i], 0 );
}
sleep( 3 );
for ( i = 0; i < MAX_THREADNUMBER; i++ )
{
pthread_join( threads[i], 0 );
}
sleep( 3 );
for ( i = 0; i < MAX_THREADNUMBER; i++ )
{
pthread_join( threads[i], 0 );
}
return 0;
}
// __builtin_expect (result->stackblock_size > 4 * size, 0) ;// allocatestack.c:209显示
// 以下代码,当为4个线程时没有问题,当有5个线程时,报段错误
#include <stdio.h>
#include <pthread.h>
#define MAX_THREADNUMBER 4 // 5
static void *func(void *arg)
{
int flag = *(int*)arg;
while( *(int*)arg == 0 )
{
int i = 0;
}
return NULL;
}
int main()
{
int flag = 0;
int i = 0;
pthread_t threads[MAX_THREADNUMBER] = {0};
for ( i = 0; i < MAX_THREADNUMBER; i++ )
{
pthread_create( &(threads[i]), 0, func, &flag );
}
sleep( 3 );
flag = 1;
for ( i = 0; i < MAX_THREADNUMBER; i++ )
{
pthread_join( threads[i], 0 );
}
sleep( 3 );
for ( i = 0; i < MAX_THREADNUMBER; i++ )
{
pthread_join( threads[i], 0 );
}
sleep( 3 );
for ( i = 0; i < MAX_THREADNUMBER; i++ )
{
pthread_join( threads[i], 0 );
}
return 0;
}
相关文章推荐
- Pthread创建线程后必须使用join或detach释放线程资源
- Pthread创建线程后必须使用join或detach释放线程资源
- 网络编程(35)—— 利用pthread_join函数等待线程结束并获取线程函数返回值
- Pthread创建线程后必须使用join或detach释放线程资源
- pthread_create创建线程后必须使用join或detach释放线程资源[内存泄漏]
- day12线程间的通信,等待唤醒机制,生产者消费者问题。新锁lock(): 守护线程,interrupt()停止线程用,join()yield()
- pthread_create创建线程后必须使用join或detach释放线程资源[内存泄漏]
- Pthread创建线程后必须使用join或detach释放线程资源
- Windows和Linux上分别怎样实现等待某个线程结束?---用WaitForSingleObject和pthread_join
- linux c之使用pthread_create创建线程pthread_join等待线程和pthread_exit终止线程总结
- Linux下多线程编程__线程的创建pthread_create与退出pthread_exit,等待当前线程退出pthread_join,获取线程ID pthread_self
- SB了,pthread_cond_wait(),在等待的时候会解锁(阻塞之后,解锁mutex给别的线程),唤醒后加锁,
- c++ Pthread创建线程后必须使用join或detach释放线程资源
- Pthread创建线程后必须使用join或detach释放线程资源
- Pthread创建线程后必须使用join或detach释放线程资源
- 等待线程退出pthread_join
- linux 线程等待与退出 pthread_join pthread_exit 函数
- pthread_join函数及linux线程
- [POSIX线程模型]_[使用pthread对工作线程进行简单控制-暂停-继续-停止]
- java使用线程请求訪问每次间隔10分钟连续5次,之后停止请求