几个关于多线程笔试题

多线程笔试面试题汇总 多线程在笔试面试中经常出现,下面列出一些公司的多线程笔试面试题。首先是一些概念性的问答题,这些是多线程的基础知识,经常出现在面试中的第一轮面试。然后是一些选择题,这些一般在笔试时出现,虽然不是太难,但如果在选择题上花费大多时间无疑会对后面的编程题造成影响,因此必须迅速的解决掉。最后是综合题即难一些的问答题或是编程题。这种题目当然是最难解决了,要么会引来面试官的追问,要么就很容易考虑不周全,因此解决 阅读详情

先来个简单的,缓解下尴尬的气氛。


子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环 10 次,接着再回到主线程又循环 100 次,如此循环50次,试写出代码。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
pthread_attr_t		attr;
pthread_mutex_t	 mutex;
pthread_cond_t	cond;

pthread_t	pid;

int 	flag1 = 0, flag2 = 0;
void *func(void *arg) {
	int	i, k = 0;
	while( 1) {
		for(i = 1; i <= 10; i++ ) 
			printf("%d ", i);
		printf("\n");
		pthread_mutex_lock(&mutex);
		flag2 = 1;
		pthread_cond_signal(&cond);
		while(flag1 != 1) {
			pthread_cond_wait(&cond, &mutex);
		}
		flag1 = 0;
		pthread_mutex_unlock(&mutex);
		k++;
		if(k ==4)
			pthread_exit(NULL);
	}
}
int main() {
	int i, k = 0;
	pthread_mutex_init(&mutex, NULL);
	pthread_cond_init(&cond, NULL);
	pthread_attr_init( &attr);                      /*属性*/
    	pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_DETACHED);
	pthread_create(&pid, &attr, func, NULL );
	while(1) {
		pthread_mutex_lock(&mutex);
		
		while(flag2 != 1) {
		
			pthread_cond_wait(&cond, &mutex);
		}
		flag2 = 0;
		for(i = 0; i < 100; i++) {
			printf("%d ",i+1);
		}
		printf("\n");
		flag1 = 1;
		pthread_cond_signal(&cond);
		pthread_mutex_unlock(&mutex);
	
		k++;
		if(k == 4) {
			/*pthread_cancel(pid);
			sleep(1);*/
			exit(0);
		}
	}
	exit(0);
}


尼玛,下面这道题,搞了2个小时都没搞出来,总有点问题。主要问题在于pthread_cond_signal时,接收线程必须准备好。这让3个线程搅在一起,果断把我弄晕了。

算了,还是搞个折中的来吧。用匿名信号灯,不过我想考这题的初衷是考互斥锁加条件吧。 

(迅雷笔试题):

编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
//#include "unpipc.h"
#include <semaphore.h>
pthread_t		pidA, pidB, pidC;
pthread_attr_t		attr;
sem_t	semA, semB, semC;

void *funcA(void *arg);
void *funcB(void *arg);
void *funcC(void *arg);
int main( ) {
	int		i;
	//pthread_attr_init( &attr);                      /*属性*/
    	//pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_DETACHED);

	sem_init(&semA, 0, 1);
	sem_init(&semB, 0, 0);
	sem_init(&semC, 0, 0);
	pthread_create(&pidA, &attr, funcA, (void *)&pidA );
	pthread_create(&pidB, &attr, funcB, (void *)&pidB );
	pthread_create(&pidC, &attr, funcC, (void *)&pidC );
	pthread_join(pidA, NULL);
	pthread_join(pidB, NULL);
	pthread_join(pidC, NULL);
	sem_destroy(&semA);
	sem_destroy(&semB);
	sem_destroy(&semC);
	exit(0);
}
void *funcA(void *arg) {
	long		pid = *(long *)arg;
	int 		i;
	for(i = 0; i< 10; i++){
		sem_wait(&semA);
		printf("A"); /*printf("%ld ", pid);*/
		fflush(stdout);
		sem_post(&semB);
	}
	return NULL;
}
void *funcB(void *arg) {
	long		pid = *(long *)arg;
	int 		i;
	for(i = 0; i< 10; i++){
		sem_wait(&semB);
		printf("B", i);/*printf("%ld ", pid);*/
		fflush(stdout);
		sem_post(&semC);
	}
	return NULL;
}
void *funcC(void *arg) {
	long		pid = *(long *)arg;
	int 		i;
	for(i = 0; i< 10; i++){
		sem_wait(&semC);
		printf("C");/*printf("%ld ", pid);*/
		fflush(stdout);
		sem_post(&semA);
	}
	return NULL;
}




尼玛,再附上没整的苦的代码,供以后有时间了再修改。  尼玛,贴代码也排版错误,神了。


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>


pthread_t pidA, pidB, pidC;
pthread_mutex_t mutex1,mutex2, mutex3, mutex;
pthread_cond_t condA, condB,condC , condPB, condPA, condPC;
pthread_attr_t attr;
int t =1;
void *funcA(void *arg);
void *funcB(void *arg);
void *funcC(void *arg);


int flag1 = 0;
int flag2 = 0;
int flag = 0;
int flagB2A = 0;
int flagC2B = 0;
int main( ) {
int i;
pthread_mutex_init(&mutex1, NULL);
pthread_mutex_init(&mutex2, NULL);
pthread_mutex_init(&mutex3, NULL);
pthread_mutex_init(&mutex, NULL);
pthread_cond_init(&condA, NULL);
pthread_cond_init(&condB, NULL);
pthread_cond_init(&condC, NULL);
pthread_cond_init(&condPA, NULL);
pthread_cond_init(&condPB, NULL);
pthread_cond_init(&condPC, NULL);



pthread_attr_init( &attr);                      /*属性*/
    pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_DETACHED);


//pthread_setconcurrency(3);
pthread_create(&pidA, &attr, funcA, (void *)&pidA );
pthread_create(&pidB, &attr, funcB, (void *)&pidB );
pthread_create(&pidC, &attr, funcC, (void *)&pidC );


pthread_mutex_destroy(&mutex);
pthread_cond_destroy(&condA);
pthread_cond_destroy(&condB);
pthread_cond_destroy(&condC);
pause();
exit(0);
}
void *funcA(void *arg) {
long pid = *(long *)arg;
int i;
for(i = 0; i< 10; i++){
if(t == 0){
pthread_mutex_lock(&mutex1);
}
pthread_cond_signal(&condPA);
t =0;
pthread_cond_wait(&condPB, &mutex1);/*等待B准备好*/
pthread_mutex_unlock(&mutex1);


pthread_mutex_lock(&mutex);

flag1 = 1;
pthread_cond_signal(&condB);
while(flag != 1){
pthread_cond_wait(&condA, &mutex);
}
flag = 0;
pthread_mutex_unlock(&mutex);
}
}
void *funcB(void *arg) {
printf("call B\n");
long pid = *(long *)arg;
int i;
for(i = 0; i< 10; i++){
/*等待C准备好*/
pthread_mutex_lock(&mutex1);
pthread_cond_wait(&condPC, &mutex1);
pthread_mutex_unlock(&mutex1);


pthread_mutex_lock(&mutex);
while(flag1 != 1) {
pthread_cond_signal(&condPB);  /*B准备好*/
pthread_cond_wait(&condB, &mutex);
}
flag1 = 0;
pthread_cond_signal(&condC);
pthread_mutex_unlock(&mutex);
}
}
void *funcC(void *arg) {
long pid = *(long *)arg;
int i;
for(i = 0; i< 10; i++){
pthread_mutex_lock(&mutex1);
pthread_cond_wait(&condPA, &mutex1);
pthread_mutex_unlock(&mutex1);
pthread_mutex_lock(&mutex);

while(flag2 != 1) {
pthread_cond_signal(&condPC); //C准备好
pthread_cond_wait(&condC, &mutex);
}
flag2 = 0;
flag = 1;
pthread_cond_signal(&condA);
pthread_mutex_unlock(&mutex);
}
}

蔚来汽车笔试题-20210718 蔚来汽车笔试题 2021.7.18 选择题部分 有效选择题 1 2 3 6 7 8 12 15 16 18 20 第一题 散列函数散列存储 第二题 多线程的描述错误的是 这题选B A 两个线程同时对简单类型全局变量进行写操作也需要互斥 B 实现可重入函数时,对自动变量也要用互斥量加以保护 C 可重入函数不可以调用不可重入函数 D 线程同步的方法包括使用临界区,互斥量,信号量等 不太懂什么是可重入函数?可重入函数可认为是可以被中断的函数,自动变量定义的时候才被创建,函数返回时,系统回收空间,他是局部作用域变 阅读详情

相关推荐

C++编程:笔试题实战与技巧全解

本文还有配套的精品资源,点击获取 简介:本书为2007至2008年IT企业C++笔试题汇编,旨在帮助读者深入掌握C++核心概念、语法和应用技巧。内容涵盖了类、对象、继承、多态、内存管理、指针与引用、STL容器与算法、异常处理、模板元编程、C++标准库、多线程与并发、设计模式以及面试实践技巧。通过学习这些关键知识点,读者将提升编程能力,并为面试和项目开发做好准备。 1....

weixin_33431149的博客 1019

Java多线程经典的4道笔试题---含多种实现方式

1、按序输出 同时启动三个线程,分别为A、B、C,其中A线程打印“a”,B线程打印“b”,C线程打印“c”,要求按照abc顺序打印输出。 第一种方式 使用join实现,join方法表示调用线程必须等待该线程执行完成后才能继续往下执行。 public class SortPrint { public static void main(String[] args) throws InterruptedException { SortPrint sortPrint = new SortP

自律使我自由 4452

基于DFT的mbist sdc模板(DFT)

摘要:本文详细介绍了DFT测试模式下的SDC约束方法。

murphyrong的博客 922

笔试题总结——笔试中常见的多线程方法相关问题

笔试题总结——笔试中常见的多线程方法相关问题   通过最近做笔试题发现多次问到多线程方法的相关问题,本篇文章将对这些方法进行解答分析。   几种常用方法的用途?   多线程中有哪些方法会释放锁?   多线程中有哪些方法会释放CPU资源?   join和sleep的区别?   首先看几种常用方法的用途,这个没什么可说的,都是一些概念需要记忆的东西,这里简单列举一下,具体的可以参考:多线程常用方法...

xiaoaxiao 301

Ubuntu的初步环境配置(VMware)

4.屏幕显示不全解决完后,在试用Ubuntu里面,直接双击“安装Ubuntu 20.04.6 LTS”。如果不存在“屏幕显示不全”的问题,直接点击安装即可,大致安装步骤与以下步骤类似。15.点击现在重启,重启成功后,会出现“清除安装介质”的问题。19.此时点开火狐,可以上网,但只可输入英文,不可以输入中文,具体解决方法见3.2。3.进入安装界面,此时可能会出现“屏幕显示不全”的问题,具体解决方法见3.1。8.选择“正常安装”、“安装Ubuntu时下载更新”,点击继续。最后,点击保留更改,设置成功。

森菌蛙诺的博客 2277

PyTorch GPU版本安装避坑指南:解决RuntimeError: No CUDA GPUs are available报错

本文详细解析了PyTorch GPU版本安装过程中常见的`RuntimeError: No CUDA GPUs are available`报错问题,从硬件驱动检查、CUDA Toolkit与cuDNN安装到PyTorch GPU版本的正确配置,提供了全面的避坑指南和实战验证方法,帮助开发者高效搭建深度学习开发环境。

r2s3t4的博客 298

Java多线程之interrupt()方法与sleep(),join(),wait()

1. sleep() & interrupt() 线程A正在使用sleep()暂停着: Thread.sleep(100000); 如果要取消他的等待状态,可以在正在执行的线程里(比如这里是B)调用 a.interrupt(); 令线程A放弃睡眠操作,这里a是线程A对应到的Thread实例 执行interrupt()时,并不需要获取Thread实例的锁定.任何线程在任何时刻,都可以...

andy1515的专栏 664

“探索thumbdata4文件的奥秘:编程中的神秘存在“

综上所述,thumbdata4文件在编程中是一个常见的存在,与图库应用程序和图片浏览器密切相关。通过使用适当的库和工具,我们可以读取和处理thumbdata4文件中的缩略图数据,以提供更好的用户体验。我们首先读取8字节的块头,其中包含了下一个缩略图块的大小。你可以根据自己的需求来定义对块数据的处理方式,例如将其保存为图像文件或进行其他的分析操作。thumbdata4文件通常以二进制格式存储,其中包含着设备上浏览过的图片的缩略图。因此,你可能需要根据具体的thumbdata4文件结构进行适当的解析和处理。

JieLun_C的博客 792

多线程阿里笔试题1

题目 下面addOne()函数是否线程安全,请回答原因 public class Test { private volatile int value = 0; void addOne(){ ++value; } } 测试代码 public static void main(String[] args) throws InterruptedExceptio...

老狼的博客 384

备战2025数学建模国赛(算法65):Fisher判别分析

在数学建模竞赛中,我们常常会遇到需要对研究对象进行分类或判断的问题。例如,根据西瓜的各类指标判断其好坏,根据经济数据判断一个国家的发展程度,或根据病人的医学影像特征判断其是否患病。这类“分类判别”问题,是建模竞赛中最常见的题型之一。Fisher判别分析(或称线性判别分析,LDA)作为一种经典的、有监督的降维与分类方法,因其模型简洁、可解释性强、计算高效而备受青睐。

YOLO 422

FineReport实战-- 国内外各地区销售数据分析 多个图表联动

进行国内外各地区业务员销售数据分析是一项复杂但极具价值的任务,它可以帮助企业了解不同市场的表现,并据此调整销售策略以提高整体绩效。实现功能:同一个报表里面多个图表联动问题。

Davina_yu的博客 1200

几个关于多线程笔试题(linux)

子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环 10 次,接着再回到主线程又循环 100 次,如此循环50次,试写出代码。#include #include #include #include pthread_attr_t attr; pthread_mutex_t mutex; pthread_cond_t cond; pthread_t pid; int

ly0303521的专栏 1898

【nvidia-B200】实际生产报错NVRM: nvAssertFailedNoLog: Assertion failed: pIOVAS != NULL @ io_vaspace.c:601

升级 NVIDIA 驱动到 R545/R550 数据中心版本(解决 IOVA bug,这是性能差的根本原因);重启服务器(清理驱动残留资源,消除日志中的 NVRM 错误);验证 NVLink/PCIe 链路(确保 8 卡互联使用高速链路,而非单卡 PCIe 共享带宽)。完成这 3 步后,ncccl-test的all_reduce带宽应能提升至100GB/s 以上(取决于服务器的 NVLink/NVSwitch 配置),恢复正常性能。

jundao1997的专栏 652

【牛客网java笔试题】以下多线程对int型变量x的操作,哪几个不需要进行同步

以下多线程对int型变量x的操作,哪几个不需要进行同步() A.x=y; B.x++; C.++x; D.x=1; A.由于y的值不确定,所以要加锁; B,C 两个在多线程情况下是必须要加锁的,因为他们是先被读入寄存器,然后再进行+1操作,如果没有加锁,那么可能会出现数据异常; D 原子操作,所以不需要加锁 原子性:指该操作不能再继续划分为更小的操作。 ...

藓类少女的博客 5868

手把手教你学Simulink--基础微电网场景实例:基于Simulink的混合交直流微电网架构仿真

本文基于Simulink构建混合交直流微电网仿真模型,通过交流子网(风电+交流负荷)和直流子网(光伏+储能+直流负荷)的协同控制,实现系统效率提升8.5%。重点介绍了混合架构原理、下垂控制策略及Simulink建模方法,包括核心模块实现、协调控制器代码和仿真参数设置。通过三种工况测试验证了系统性能:功率转移响应时间<0.5s,电压波动<5%,显著优于传统独立子网架构。文章还提供了进阶优化方向和完整代码清单,为微电网仿真研究提供实用参考。

MHD0815的博客 129

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

你应该会的一道多线程笔试题

前言 最近也面了好多家企业,也总结到很多笔试经验和面试经验。笔试大多数Java题目都是牛客网原题和简单排序,数据库,Java基础概念,数据结构,MVC模式等。面试官问的题目涉及的知识无非是Java基础知识,设计模式,网络等。我发现出现频率很高的知识点有多线程,设计模式(单例模式,策略模式,观察者模式)等。今天就来说一下笔试和面试中常见的多线程题目。 笔试 题目:有A,B,C三个线程,,A线程输出

cmazxiaoma的博客 812

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

一道笔试题看出你是否掌握多线程

前段时间在某求职网站上受邀投递了阿里的某个职位,由于本人工作年限有限,项目经验也缺乏亮点,并没有期望简历能够通过筛选。某个下午,突然接到阿里面试官的电话,进行了简单的交流。面试官告知要先进行笔试,笔试题会在晚上某个时间发至本人的邮箱,3道笔试题,要求在90分钟内完成。通话结束后,既兴奋又惊慌,兴奋是简历通过筛选了,惊慌是没有做好足够的准备。 在这里先说下最终的结果吧,笔试后过了大概四五天,面试官...

zhaoheng的博客 844

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

110 道 Python 面试笔试题超强汇总

本 Chat 为免费基础入门篇,获取更多面试知识点请大家参阅我的另一个 Chat :致金三银四辛勤找工作的你们:Python 面试必备。 本 Chat 你将会获得以下知识: 110 道 Python 面试笔试题汇总 简历制作与面试技巧 ...

GitChat 3743

windows 多线程 笔试面试题汇总

系列前言     本系列是本人参加微软亚洲研究院,腾讯研究院,迅雷面试时整理的,另外也加入一些其它IT公司如百度,阿里巴巴的笔试面试题目,因此具有很强的针对性。系列中不但会详细讲解多线程同步互斥的各种“招式”,而且会进一步的讲解多线程同步互斥的“内功心法”。有了“招式”和“内功心法”,相信你也能对多线程挥洒自如,在笔试面试中顺利的秒杀多线程试题。               -----

生活从来不曾有过这般惬意... 2657

面试中遇到的多线程笔试题

面试中遇到的多线程笔试题

lovinowo的博客 1196

初级java工程师笔试题

最近面试很头疼,因为满以为自己工作了1年多了,实际coding经验却压缩到不到1年。每每被面试官“痛扁”,心里特别不痛快,总以为我能给你交活不就完了吗有必要在基础上为难我吗!相信大多数不会总结,在面试中屡屡受挫的小伙伴你也是差不多的吧。因为没有一份漂亮的能拿得出手说得出口的简历,所以打好基础是非常必要的。不要再说‘我能给你完成工作就行了’这样的话了,在面试官看来你连基础都做不好,他很怀疑你交付的任

BeALittleCat的专栏 589

Java笔试题

Java笔试题库(01期) 1、Spring DAO 中最常用的类是() A,JdbcTemplate ,SimpleJdbcTemplate B,SimpleJdbcInsert,SimpleJdbcProcedure C,SimpleJdbcInsert ,SimpleJdbcStoredProc D,SimpleJdbcQuery ,SimpleJdbcEx...

LMAKE_nbsp的博客 1万+

java笔试题选择题

java笔试题选择题父子类的继承关系重写父引用子类类的访问权限12不同包子类可以访问父类protected成员内部类抽象类抽象方法String与运算符在一起char的范围String的"aaa"String的默认值String数组初始化局部变量局部变量staticstatic静态代码块static变量是所有对象共享的static变量的访问向下或向上转型运算符向上转型short的转换Math的操作位...

maqingbin8888的专栏 2311

百度笔试题3

http://hi.baidu.com/bbilu/blog/item/67129da248e524aecbefd0de.html一、选择题:15分共10题1. 在排序方法中,关键码比较次数与记录地初始排列无关的是 . A. Shell排序 B. 归并排序 C. 直接插入排序 D. 选择排序2. 以下多线程对int型变量x的操作,哪几个需要进行同步:A. x=y; B. x++; C. ++x; D. x=1; 3. 代码void func() { static int val; … } 中,变量val的内

cyf31的专栏 880

掌握这些多线程笔试题,还不轻松应对面试官

多线程的常见面试手撕题

关关的博客 846

Java基础笔试题

精选30道Java笔试题解答 下面都是我自己的答案非官方,仅供参考,如果有疑问或错误请一定要提出来,大家一起进步啦~~~   1. 下面哪些是Thread类的方法() A start()       B run()       C exit()       D getPriority() 答案:ABD 解析:看Java API docs吧:http://docs.oracle.com

Alvin的专栏 1773
上一篇: 堆
下一篇: 使用STL求第K大数
七绝乌梭
博客等级 码龄18年 5粉丝 43原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值