1.使用pthread的理由
2个字:简单
2.pthread组件
thread,
mutex,
condition var
synchronization
3.线程的终止和产生
小例:
#include <pthread/pthread.h>
#include <stdio.h>
#define NUM_THREADS 5
void *PrintHello(void *threadid)
{
long tid;
tid = (long)threadid;
printf("Hello World! It's me, thread #%ld!\n", tid);
pthread_exit(NULL);
}
int main (int argc, char *argv[])
{
pthread_t threads[NUM_THREADS];
int rc;
long t;
for(t=0; t<NUM_THREADS; t++)
{
printf("In main: creating thread %ld\n", t);
rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t);
if (rc)
{
printf("ERROR; return code from pthread_create() is %d\n", rc);
exit(-1);
}
}
pthread_exit(NULL);
return 0;
}
通过pthread_create来创建线程
其第一个参数为线程id,第二个为线程属性,第三个为线程函数,最后一个为数据参数
那么线程如何终止呢:
1.从运行函数终止
2.调用pthread_exit终止
3.调用pthread_cance
4.进程终止
向线程传递参数
#include <pthread/pthread.h>
#include <stdio.h>
#include <string>
#include <iostream>
#define NUM_THREADS 5
struct Data
{
std::string name;
};
Data* data_impl;
void *PrintHello(void* data_ptr)
{
struct Data* data;
data = (Data*)data_ptr;
std::cout<<data->name<<std::endl;
pthread_exit(NULL);
}
int main (int argc, char *argv[])
{
pthread_t threads[NUM_THREADS];
data_impl = new Data[NUM_THREADS];
data_impl[0].name = "T1";
data_impl[1] .name= "T2";
data_impl[2] .name= "T3";
data_impl[3] .name= "T4";
data_impl[4] .name= "T5";
for(int t=0; t<NUM_THREADS; t++)
{
int rc = pthread_create(&threads[t], NULL, PrintHello,&data_impl[t]);
}
pthread_exit(NULL);
delete []data_impl;
return 0;
}
其他相关线程库:
1.zthread,
2.opentherad
3.boost therad
4.原生态的平台线程函数