一、Linux 下相关函数
函数 | 描述 |
---|---|
int pthread_create (pthread_t *thread, pthread_attr_t * attr, void* (*start_routine)(void *),void *arg); | 创建一个新的线程。编译时带上-lpthread .参数说明: thread: 是一个指针,线程创建成功时,用以返回创建的线程ID attr:指定线程属性,NULL表示使用默认属性 start_routine:函数指针,指向线程创建后要调用的函数。这个被线程调用的函数也称为线程函数 arg:该参数指向传递给线程函数的参数 |
extern int pthread_join __P (pthread_t __th, void **__thread_return); | 用来等待一个线程的结束。参数说明: __th:被等待的线程标识符 __thread_return:一个用户定义的指针,它可以用来存储被等待线程的返回值。 |
extern void pthread_exit __P ((void *__retval)) attribute ((noreturn)); | 终止指定线程。参数说明: __retval:函数的返回代码,只要pthread_join中的第二个参数 thread_return不是NULL,这个值将被传递给 thread_return |
int pthread_create(pthread_t thread, pthread_attr_t * attr, void (*start_routine)(void *),void *arg);
extern int pthread_join __P (pthread_t __th, void **__thread_return);
extern void pthread_exit __P ((void *__retval)) attribute ((noreturn));
二、锁
2.1 互斥锁
extern int pthread_mutex_init (pthread_mutex_t *__mutex,
const pthread_mutexattr_t *__mutexattr)
__THROW __nonnull ((1));
函数
pthread_mutex_init
用来生成一个互斥锁。
NULL参数表明使用默认属性。如果需要声明特定属性的互斥锁,须调用函数 pthread_mutexattr_init.
函数pthread_mutexattr_setpshared
和函数pthread_mutexattr_settype
用来设置互斥锁属性。
前一个函数设置属性pshared
,它有两个取值,PTHREAD_PROCESS_PRIVATE
和PTHREAD_PROCESS_SHARED
.前者用来对不同进程中的线程同步,后者用于同步本进程的不同线程。
后者用来设置互斥锁类型,可选的类型有PTHREAD_MUTEX_NORMAL
、PTHREAD_MUTEX_ERRORCHECK
、PTHREAD_MUTEX_RECURSIVE
和PTHREAD _MUTEX_DEFAULT
.它们分别定义了不同的上所、解锁机制,一般情况下,选用最后一个默认属性。
2.1 pthread_mutex_lock 与 pthread_mutex_unlock
extern int pthread_mutex_lock (pthread_mutex_t *__mutex)
__THROWNL __nonnull ((1));
extern int pthread_mutex_unlock (pthread_mutex_t *__mutex)
__THROWNL __nonnull ((1));
pthread_mutex_lock
声明开始用互斥锁上锁,此后的代码直至调用pthread_mutex_unlock
为止,均被上锁,即同一时间只能被一个线程调用执行。当一个线程执行到pthread_mutex_lock
处时,如果该锁此时被另一个线程使用,那此线程被阻塞,即程序将等待到另一个线程释放此互斥锁。
三、线程休眠
3.1 sleep 与 usleep
extern unsigned int sleep (unsigned int __seconds);
extern int usleep (__useconds_t __useconds);
sleep()
函数的功能是把调用该函数的线程挂起一段时间,单位是秒(s);
usleep()
函数的功能是把调用该函数的线程挂起一段时间 ,单位是毫秒(ms)。
四、Windows相关函数
4.1 _beginthreadex 与 _endthreadex
_CRTIMP __cdecl __MINGW_NOTHROW unsigned long _beginthreadex
(void *, unsigned, unsigned (__stdcall *) (void *), void *, unsigned, unsigned *);
_beginthreadex
用于创建一个后台线程并即刻执行,直到运行结束或者调用_endthreadex
函数终止线程。
_beginthreadex参数说明 :
- 第一个参数:安全属性,NULL为默认安全属性。
- 第二个参数:指定线程堆栈的大小。如果为0,则线程堆栈大小和创建它的线程相同。
- 第三个参数:指定线程函数的地址,也就是线程调用执行函数地址。
- 第四个参数:传递给线程的参数的指针,可以通过传入对象的指针,在线程函数中再转化为对应类型的指针
- 第五个参数:线程初始状态,0:立即运行;CREATE_SUSPEND:suspended(悬挂)。
- 第六个参数:用于记录线程ID的地址。
4.2 WaitForSingleObject