当前位置: 首页> 财经> 访谈 > 工程公司名称大全_驻马店做网站建设的公司_上海seo优化公司 kinglink_百度推广工作好干吗

工程公司名称大全_驻马店做网站建设的公司_上海seo优化公司 kinglink_百度推广工作好干吗

时间:2025/8/13 11:42:58来源:https://blog.csdn.net/2302_80873119/article/details/144219411 浏览次数:0次
工程公司名称大全_驻马店做网站建设的公司_上海seo优化公司 kinglink_百度推广工作好干吗

1、相关背景知识

临界资源多线程、多执行流共享的资源,就叫做临界资源
临界区每个线程内部,访问临界资源的代码
互斥在任何时刻,保证有且只有一个执行流进入临界区,访问临界资源,对临界资源起到保护作用
原子性不会被任何调度机制打断的操作,该操作只有两态,要么完成,要么没开始。(只要开始,必须完成了才能中断)

2、多线程工作的问题(抢票样例)

1、首先存在初始为100的票数tickets。

2、然后新建4个线程,进行抢票。

3、为了让tickets成为临界资源,将tickets初始为全局的。

int tickets = 100; // 票数
void Job(const std::string &name)
{while (true){if (tickets > 0){/*抢票*/usleep(1000);                                                                     // 1ms -> 抢票时间printf("who : %s , get a ticket , remain tickets : %d\n", name.c_str(), tickets); // 抢票tickets--;}else{break;}}
}int main()
{Thread t1("thread-1", Job);Thread t2("thread-2", Job);Thread t3("thread-3", Job);Thread t4("thread-4", Job);t1.Start();t2.Start();t3.Start();t4.Start();t1.Join();t2.Join();t3.Join();t4.Join();return 0;
}

查看运行结果:

本来当remain tickets为0的时候,就不应该进入抢票逻辑了。

但是输出结果明显不对劲,票数都变为负数了,还在抢票。

为什么会出现这种情况呢?

多个线程并发的操作临界资源,就会带来一些问题。

因此,多个线程的临界区代码,必须具有互斥行为。

为了保证这个互斥行为,就引出了互斥量(即,加锁)。

3、锁

3.1、认识锁和接口

pthread_mutex_tpthread库提供的互斥锁类型
PTHREAD_MUTEX_INITIALIZER如果锁是全局的或者静态的,可以直接mutex = PTHREAD_MUTEX_INITIALIZER进行初始化,并且最后不需要销毁
int pthread_mutex_init(pthread_mutex *restrict mutex, const pthread_mutexattr_t *restrict attr);

初始化锁。

restrict mutex:就是需要初始化的锁。

restrict attr:表示设置锁的属性,一般置空即可。

int pthread_mutex_destroy(pthr
关键字:工程公司名称大全_驻马店做网站建设的公司_上海seo优化公司 kinglink_百度推广工作好干吗

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: