zoukankan      html  css  js  c++  java
  • posix线程模型使两个线程共同完成从0~100的相加任务之和

    一、概述

      案例:使用posix线程模型编写一小案例:两个线程做加和操作,其中一个线程从1加到50,另外一个线程从51加到100.使其最后结果等于5050

    二、示例代码

    // 创建两个线程共同操作0~100相加
    // Created by wei.yang on 2021/10/15.
    //
    #include "create_two_thread.h"
    
    //互斥量
    inline pthread_mutex_t lock;
    inline int sum = 0;
    
    /***
     * 第一个线程的回调函数 从1加到50
     * @param args
     * @return
     */
    void* add11(void * args) {
        pthread_mutex_lock(&lock);
        for (int i = 1; i <= 50; i++) {
            sum += i;
            usleep(100);
        }
        pthread_mutex_unlock(&lock);
        return 0;
    }
    
    /**
     * 第二个线程的执行函数从51加到100
     * @param arg
     * @return
     */
    void * add22(void * arg) {
        pthread_mutex_lock(&lock);
        for (int i = 51; i <= 100; i++) {
            sum += i;
            usleep(100);
        }
        pthread_mutex_unlock(&lock);
        return 0;
    }
    
    
    void addOneZeroZeroSum() {
        //初始化线程id
        pthread_t pt1, pt2;
        //初始互斥量
        pthread_mutex_init(&lock, NULL);
        //创建线程
        pthread_create(&pt1, NULL, add11, (void*)1);
        pthread_create(&pt2, NULL, add22, (void*)1);
    
        //等待对应线程结束
        pthread_join(pt1, NULL);
        pthread_join(pt2, NULL);
        //线程结束后打印最终相加的值,应该等于5050
        LOGE("1~100相加之和为:%d",sum);
        //销毁锁
        pthread_mutex_destroy(&lock);
        //对全局变量sum进行重置
        sum = 0;
    }
    

      

  • 相关阅读:
    [转]PC客户端与Android服务端的Socket同步通信(USB)
    [转]Android手机通过socket与pc通信
    [转]异常:android.os.NetworkOnMainThreadException
    [转]使用openssl库实现RSA、AES数据加密
    朴素贝叶斯分类器
    关于Mysql数据库的注意点
    poj 2386 Lake Counting
    poj 3253 Fence Repair
    poj 3069 Saruman's Army
    pat1100. Mars Numbers (20)
  • 原文地址:https://www.cnblogs.com/tony-yang-flutter/p/15410669.html
Copyright © 2011-2022 走看看