C 语言多线程编程
发布日期:2021-05-07 20:54:59 浏览次数:17 分类:精选文章

本文共 2492 字,大约阅读时间需要 8 分钟。

一、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_PRIVATEPTHREAD_PROCESS_SHARED.前者用来对不同进程中的线程同步,后者用于同步本进程的不同线程。
后者用来设置互斥锁类型,可选的类型有PTHREAD_MUTEX_NORMALPTHREAD_MUTEX_ERRORCHECKPTHREAD_MUTEX_RECURSIVEPTHREAD _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

上一篇:AngularJS ng-class、ng-style
下一篇:C socket编程--套接字函数

发表评论

最新留言

表示我来过!
[***.240.166.169]2025年04月03日 04时05分28秒