当前位置: 首页 > wzjs >正文

深圳网站制作公司讯seo搜索引擎优化薪酬

深圳网站制作公司讯,seo搜索引擎优化薪酬,如何通过axure做网站,wordpress php推送示例目录 1.题目详情 2.解题思路 2.1.分析题目 2.2.解析思路 3.代码实现 4.运行结果 1.题目详情 昨天刷抖音,遇到一个面试题,描述如下: 请使用两个线程,分别顺序交替打印奇数和偶数,直到10为止。例如有两个线程&#…

目录

1.题目详情

2.解题思路

2.1.分析题目

2.2.解析思路

3.代码实现

4.运行结果


1.题目详情

        昨天刷抖音,遇到一个面试题,描述如下:

        请使用两个线程,分别顺序交替打印奇数和偶数,直到10为止。例如有两个线程,分别为线程1和线程2,线程1首先打印数字1,然后线程2打印数字2,接着线程1再打印数字3,线程2再打印数字4,依次交替运行直到10为止。

2.解题思路

2.1.分析题目

        乍一看题目很简单,但是其中涉及了多线程、锁、线程同步等知识点,如果简单的使用互斥锁或者其他的锁恐怕不会是最好的答案。

2.2.解析思路

        现在无非要解决两个问题,第一个问题:线程1需要打印奇数而线程2需要打印偶数;第二个问题:线程1执行完之后需要跳转到线程2执行。这其中就涉及到了线程切换如何实现,关键需要解决第二个问题。

        抛开第一个问题不谈,要解决线程切换的问题,我们先使用互斥锁实现,采用一个全局变量(标记位)控制两个线程的执行顺序。如果标记位等于某一个值则执行线程1,执行完将标记位置为另一个状态值,线程2获取到标记位发生改变,则执行线程2,依次类推。

        提到这种解题思路,这不就是信号量操作吗,线程1先执行,然后释放信号,线程2阻塞等待信号,然后执行。

3.代码实现

互斥锁代码实现:

#include <stdio.h>
#include <pthread.h>
#include <unistd.h>pthread_mutex_t lock;
#define TARGET 10
int turn = 1;  //1: 表示轮到打印奇数 2: 表示轮到打印偶数//打印奇数
void* print_odd(void* arg) {int num = 1;while (num <= TARGET) {pthread_mutex_lock(&lock);while (turn != 1) {pthread_mutex_unlock(&lock);continue;}printf("thread id:%lu, num:%d\n", pthread_self(), num);turn = 2;pthread_mutex_unlock(&lock);num += 2;}return NULL;
}//打印偶数
void* print_even(void* arg) {int num = 2;while (num <= TARGET) {pthread_mutex_lock(&lock);while (turn != 2) {pthread_mutex_unlock(&lock);continue;}printf("thread id:%lu, num:%d\n", pthread_self(), num);turn = 1;pthread_mutex_unlock(&lock);num += 2;}return NULL;
}int main() {//初始化锁pthread_mutex_init(&lock, NULL);pthread_t odd_thread, even_thread;//创建线程pthread_create(&odd_thread, NULL, print_odd, NULL);pthread_create(&even_thread, NULL, print_even, NULL);//等待线程结束pthread_join(odd_thread, NULL);pthread_join(even_thread, NULL);//销毁锁pthread_mutex_destroy(&lock);return 0;
}

        打印奇数线程首先运行,turn为标记位,如果标记位为1则打印奇数并修改标记位,如果标记位不是1则释放锁等待;打印偶数线程后运行,标记位初始状态为1,等待标记位,待标记位修改之后,打印偶数。

信号量代码实现:

#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <signal.h>
#include <semaphore.h>#define TARGET 10/* 奇数信号量 */
sem_t sem_odd;
/* 偶数信号量 */
sem_t sem_even;static void *print_odd() {int num = 1;while (num <= TARGET) {sem_wait(&sem_odd);printf("thread id:%lu, num:%d\n", pthread_self(), num);num += 2;sem_post(&sem_even);}return NULL;
}static void *print_even() {int num = 2;while (num <= TARGET) {sem_wait(&sem_even);printf("thread id:%lu, num:%d\n", pthread_self(), num);sem_post(&sem_odd);num += 2;}return NULL;
}int main()
{int ret = 0;//将奇数信号量初始值设为1 首先运行ret = sem_init(&sem_odd, 0, 1); if (ret != 0) {printf("init sem_odd failed, ret:%d\n.", ret);return -1;}//将偶数信号量初始值设为0 其次运行ret = sem_init(&sem_even, 0, 0);if (ret != 0) {printf("init sem_even failed, ret:%d\n.", ret);return -1;}pthread_t thread1 = 0;pthread_t thread2 = 0;pthread_create(&thread1, NULL, print_odd, NULL);pthread_create(&thread2, NULL, print_even, NULL);pthread_join(thread1, NULL);pthread_join(thread2, NULL);return 0;
}

        设置两个信号量,一个信号量用于控制打印奇数,一个信号量用于控制打印偶数;奇数信号量初始化为1,首先运行,偶数信号量初始化为0,其次运行;打印奇数线程运行完之后发送偶数信号量运行信号,偶数信号量运行完成之后发送奇数信号量运行信号,依次交替打印奇偶数。

4.运行结果

        两个线程依次交替打印奇偶数:

http://www.dtcms.com/wzjs/448862.html

相关文章:

  • 遵义网站建设制作公司站长之家ip地址归属查询
  • 开发软件自学步骤seo顾问服务福建
  • 网上买保险网站军事新闻俄乌最新消息
  • 网购网站开发背景郑州做网站公司有哪些
  • 做一个自己的免费网站吗p站关键词排名
  • 惠安网站建设报价seo关键词排名优化软件怎么选
  • 简述网站建设的步骤海南百度推广代理商
  • 优书网下载广州做seo整站优化公司
  • 外贸网站建站那家公司好销售方案
  • 阳江网站建设指数基金怎么买
  • 手机建站cmsseo运营是做什么的
  • 武汉专业网站建设seo初级入门教程
  • 弄一个网站多少钱湖南竞价优化专业公司
  • 一个空间2个网站代码企业seo
  • 网上如何做任务赚钱的网站南昌seo教程
  • 花瓣网设计网站成都网站建设公司排名
  • 乐清 网站建设seo推广系统
  • 上海松江做网站的公司景德镇seo
  • 电脑网站制作教程2023年7月最新疫情
  • 河南省的网页制作seo优化排名工具
  • 长沙网站开发公盘多多网盘搜索
  • 鹤峰网站制作seo推广方法集合
  • 莱芜网站制作武汉官网优化公司
  • 清江浦区住房和城乡建设局网站百度关键词工具在哪里
  • 网站建设维护及使用管理办法网上怎么找客户资源
  • 三门峡做网站公司seo是指什么岗位
  • 东阳房产网赣州seo培训
  • 网站建设与管理题库深圳网站建设公司排名
  • 嵊州市建设银行网站找关键词的三种方法
  • 网站公司的客户怎么来长沙排名优化公司