首页 > 其他分享 >thread同步测试

thread同步测试

时间:2022-11-06 12:56:31浏览次数:37  
标签:同步 thread int number 线程 测试 pthread sem NULL

1.编译运行附件中的代码,提交运行结果截图,并说明程序功能

  • 代码:
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <semaphore.h>

#define NUM 5
int queue[NUM];
sem_t blank_number, product_number;

void *producer ( void * arg )
{
	static int p = 0;

	for ( ;; ) {
		sem_wait( &blank_number );
		queue[p] = rand() % 1000;
		printf("Product %d \n", queue[p]);
		p = (p+1) % NUM;
		sleep ( rand() % 5);
		sem_post( &product_number );
	}
}
void *consumer ( void * arg )
{

	static int c = 0;
	for( ;; ) {
		sem_wait( &product_number );
		printf("Consume %d\n", queue[c]);
		c = (c+1) % NUM;
		sleep( rand() % 5 );
		sem_post( &blank_number );
	}
}

int main(int argc, char *argv[] )
{
	pthread_t pid, cid;
    
	sem_init( &blank_number, 0, NUM );
	sem_init( &product_number, 0, 0);
	pthread_create( &pid, NULL, producer, NULL);
	pthread_create( &cid, NULL, consumer, NULL);
	pthread_join( pid, NULL );
	pthread_join( cid, NULL );
	sem_destroy( &blank_number );
	sem_destroy( &product_number );
	return 0;
}

  • 实验结果:

  • 程序功能:一个消费者线程,一个生产者线程。最大的空间为5,空格+产品=5。生产者生成资源,消费者取走资源。

2.修改代码,把同步资源个数减少为3个,把使用资源的线程增加到 (你的学号%3 + 4)个,编译代码

  • 20201332 % 3 = 1,1 + 4 = 5

  • 代码:

#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <semaphore.h>
#include <unistd.h>
#define NUM 3
int queue[NUM];
sem_t blank_number, product_number,mutex;
 
int c = 0;
 
void *producer ( void * arg )//生产者
{
    static int p = 0;
 
    for ( ;; ) {
        sem_wait( &blank_number );//空格子锁
        queue[p] = rand() % 1000;
        printf("Product %d \n", queue[p]);
        p = (p+1) % NUM;
        sleep ( rand() % 5);
        sem_post( &product_number );
    }
}
void *consumer ( void * arg )//消费者
{
 
    for( ;; ) {
        sem_wait(&mutex);
        sem_wait( &product_number );
        printf("Consume %d\n", queue[c]);
        c = (c+1) % NUM;
        sleep( rand() % 5 );
        sem_post( &blank_number );
        sem_post( &mutex);
    }
}
 
int main(int argc, char *argv[] )
{
    pthread_t pid, cid,cid1,cid2,cid3,cid4;
     
    sem_init( &blank_number, 0, NUM );//初始化空格信号量
    sem_init( &product_number, 0, 0);//初始化产品信号量
    sem_init( &mutex, 1, 1);//初始化(消费者的)互斥信号量为1
    pthread_create( &pid, NULL, producer, NULL);//创建生产者线程
    pthread_create( &cid, NULL, consumer, NULL);//创建消费者线程
    pthread_create( &cid1, NULL, consumer, NULL);//创建消费者线程
    pthread_create( &cid2, NULL, consumer, NULL);//创建消费者线程
    pthread_create( &cid3, NULL, consumer, NULL);//创建消费者线程
    pthread_create( &cid4, NULL, consumer, NULL);//创建消费者线程
     
    pthread_join( pid, NULL );//等待生产者线程执行完
    pthread_join( cid, NULL );//等待消费者线程执行完
    pthread_join( cid1, NULL );//等待消费者线程执行完
    pthread_join( cid2, NULL );//等待消费者线程执行完
    pthread_join( cid3, NULL );//等待消费者线程执行完
    pthread_join( cid4, NULL );//等待消费者线程执行完
 
    sem_destroy( &blank_number );
    sem_destroy( &product_number );
    return 0;
}
  • 实验结果:

标签:同步,thread,int,number,线程,测试,pthread,sem,NULL
From: https://www.cnblogs.com/wdys12138/p/16862407.html

相关文章

  • MyBatis框架快速入门-搭建环境,编写代码,测试。
    MyBatis框架快速入门1入门案例案例的结构如下:MyBatis开发准备搭建MyBatis开发环境,实现第一个案例2使用Mybatis准备下载mybatishttps://github.com/mybati......
  • 测试框架搭建
    1、新建一个module,在pom.xml中新增如下内容:<properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></......
  • Python自动化测试工具Selenium
    Python能发挥作用的领域太多了,包括web开发、爬虫、自动化测试、大数据分析、机器学习与深度学习。今年我们来玩玩Python在web自动化领域的应用。SeleniumWithPython中文......
  • pgpool ii在lightdb下的性能测试
    1、从https://www.pgpool.net/下载最新版pgpoolii,如4.3.2。2、假设安装了postgresql或lightdb,百度一搜即可3、解压包,执行./configure &&make&&makeinstall4、修......
  • 测试也应该具备的项目管理能力
    转载:https://www.cnblogs.com/imyalost/p/16560084.html前几天在技术交流群有同学问到:“需求不明确&测试时间不足,经常加班,交付质量也不太好,该如何处理”?群里其他同学很热......
  • 测试脚本
    #!/bin/bashBIN=/path/to/your/vasp/executablermWAVECARSUMMARY.diaforiin5.15.25.35.45.55.65.7;docat>POSCAR<<!cubicdiamond$i......
  • 测试流程如何落地?
    转载:https://www.cnblogs.com/imyalost/p/16380505.html  前段时间公众号后台有粉丝留言问了一个问题:作为测试leader,该如何落地测试流程?这个问题初看很简单,落地流程......
  • robotframework自动化测试框架实战教程:测试数据整理工具(Robottiy)
    *内置的Tidy工具在RobotFramework4.1中被弃用,取而代之的是新的增强型外部Robottiy工具。它在RobotFramework5.0中被完全删除。安装pipinstallrobotframework-tidy......
  • robotframework自动化测试框架实战教程:测试数据文档工具(Testdoc)
    生成文档的数据源可以是单个文件,单个目录,也可以是多个文件和目录.所有这些情况,最后那个参数都必须是最终文档输出要写入的文件.基本用法python-mrobot.testdoc......
  • 测试工程师快速成长书单推荐
    转载:老张读书分类https://www.cnblogs.com/imyalost/category/923003.html 关于软件测试的思维和方法论《Google软件测试之道》 五星推荐《敏捷软件测试》 现在越来......