多线程:利用互斥锁来处理全局变量的互斥问题

多个线程会共享一些进程的静态数据段的资源,比如在主线程中定义的全局变量。肯定其他线程也能访问的。

在Unix, Linux平台下,我们利用互斥锁来处理全局变量的互斥问题。

考查互斥锁变量,利用互斥锁变量专门关联一个变量。

数据类型: pthread_mutex_t

初始化: pthread_mutex_t macPIB_mutex = PTHREAD_MUTEX_INITIALIZER;

操作函数::

int pthread_mutex_lock(pthread_mutex_t *mutex) //加锁函数,如果mutex被锁住了,此函数会阻塞程序,直到那个锁被释放。

int pthread_mutex_unlock(pthread_mutex_t *mutex) //解锁函数

互斥锁变量适合于防止同时访问某个共享变量,但是我们需要在等待某个条件发生期间让我们进入睡眠,而不是一直的轮询的查询。可以使用 条件变量的数据类型。

考查条件变量

数据类型: pthread_cond_t

初始化:pthread_cond_t count_cond = PTHREAD_COND_INITIALIZER;

操作函数:

int pthread_cond_wait (pthread_cond_t *condptr, pthread_mutex_t *mutexptr)

int pthread_cond_signal (pthread_cond_t *condptr)

注意,我们使一个全局变量,同时关联上一个互斥锁和一个条件变量。

然后如果在调用pthread_cont_wait的时候,已经被锁住了,则睡眠,同时释放mutexptr锁。

具体解释见UNIX网络编程的604-606页。

以上是关于多个线程对共享变量访问的互斥等问题。

我们在创建线程时,主线程需要给线程函数传递参数,注意,那个参数一定要注意,不能传指针。可以传值(C语言函数调用拷贝参数,支持);或者在传之前,动态分配一个内存。具体的例子见UNIX网络编程的588-589页。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值