C 语言多线程编程

一、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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

书香水墨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值