C语言中多线程编程包括的文件:#include<pthread.h>(linux环境下)
pthread_t //线程函数返回类型
pthread_mutrex_t //互斥锁类型
int pthread_create(pthread_t *thread,pthread_attr_t *attr,void *(*func),void *arg);
参数说明
thread :指向thread_t类型变量的指针,用于保存线程的ID
typedef unsigned long int thread_t;
attr :指向pthread_attr_t类型变量的指针,或者为NULL
func:指向新线程所运行函数的指针
arg: 传递给func的参数
成功创建线程则返回0,否则返回非零
这个参数为线程属性,pthread_attr_t主要包括:scope属性,detach属性,堆栈地址,堆栈大小,优先级。参数设置为NULL则将采用默认的属性配置。
http://blog.csdn.net/hudashi/article/details/7709413
http://hi.baidu.com/7828058/blog/item/256e16decd1a385e94ee3784.html
当线程的属性没有设置为PTHREAD_CREATE_DETACH时候,我们可以使用pthread_join等待进程结束,来释放资源。
函数原型
int pthread_join(pthread_t thread,void** retval)
参数说明:
thread:所等待的进程
retval:z指向某存储线程返回值的变量
返回值:0 成功返回
errorcode 错误
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <windows.h> int piao = ; pthread_mutex_t mut; void* tprocess1(void* args)
{
int a = ;
while (true)
{
pthread_mutex_lock(&mut);
if (piao>)
{
Sleep();
piao--;
printf("窗口1----------------还剩%d张票\n", piao);
}
else
{
a = ;
}
pthread_mutex_unlock(&mut);
if (a == )
{
break;
}
}
return NULL;
} void* tprocess2(void* args)
{
int a = ;
while (true)
{
pthread_mutex_lock(&mut);
if (piao>)
{
Sleep();
piao--;
printf("窗口2----------------还剩%d张票\n", piao);
}
else
{
a = ;
}
pthread_mutex_unlock(&mut);
if (a == )
{
break;
}
}
return NULL;
}
void* tprocess3(void* args)
{
int a = ;
while (true)
{
pthread_mutex_lock(&mut);
if (piao>)
{
Sleep();
piao--;
printf("窗口3----------------还剩%d张票\n", piao);
}
else
{
a = ;
}
pthread_mutex_unlock(&mut);
if (a == )
{
break;
}
}
return NULL;
}
void* tprocess4(void* args)
{
int a = ;
while (true)
{
pthread_mutex_lock(&mut);
if (piao>)
{
Sleep();
piao--;
printf("窗口4----------------还剩%d张票\n", piao);
}
else
{
a = ;
}
pthread_mutex_unlock(&mut);
if (a == )
{
break;
}
}
return NULL;
} int main() {
pthread_mutex_init(&mut, NULL);
pthread_t t1;
pthread_t t2;
pthread_t t3;
pthread_t t4;
pthread_create(&t4, NULL, tprocess4, NULL);
pthread_create(&t1, NULL, tprocess1, NULL);
pthread_create(&t2, NULL, tprocess2, NULL);
pthread_create(&t3, NULL, tprocess3, NULL);
Sleep();
return ;
}
//线程一的线程函数一结束就自动释放资源,线程二就得等到pthread_join来释放系统资源。 #include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <pthread.h> static void pthread_func_1 (void);
static void pthread_func_2 (void); int main (int argc, char** argv)
{
pthread_t pt_1 = ;
pthread_t pt_2 = ;
pthread_attr_t atrr = {};
int ret = ; /*初始化属性线程属性*/
pthread_attr_init (&attr);
pthread_attr_setscope (&attr, PTHREAD_SCOPE_SYSTEM);
pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED); ret = pthread_create (&pt_1, &attr, pthread_func_1, NULL);
if (ret != )
{
perror ("pthread_1_create");
} ret = pthread_create (&pt_2, NULL, pthread_func_2, NULL);
if (ret != )
{
perror ("pthread_2_create");
} pthread_join (pt_2, NULL); return ;
} static void pthread_func_1 (void)
{
int i = ; for (; i < ; i++)
{
printf ("This is pthread_1.\n"); if (i == )
{
pthread_exit ();
}
} return;
} static void pthread_func_2 (void)
{
int i = ; for (; i < ; i ++)
{
printf ("This is pthread_2.\n");
} return;
}