3、Linux环境编程

并发下的计数方案(锁)
项目目的:了解并发,了解技术方案
项目知识点:互斥锁、自旋锁、原子操作
推荐书籍:unix高级环境编程
课后练习题:了解CAS,并实现CAS

1、了解并发,了解技术方案
究竟什么样的系统算是高并发系统?今天,我们就一起解密高并发业务场景下典型的秒杀系统的架构,让大家学以致用。
你需要了解的秒杀方案

2、void *p()是一个指针型函数,它的函数名为p,返回了一个指针,因为是void,这个指针没有定义类型,所以返回的是一个通用型指针。
3、互斥锁、自旋锁、原子操作
基本操作:锁初始化,上锁——操作——解锁
linux线程互斥量pthread_mutex_t使用简介
01Linux下C语言锁的学习之Linux下的互斥锁
4、了解CAS,怎么实现CAS
面试|详解CAS及其引发的三个问题

#include<stdio.h>
#include<pthread.h>
#include<unistd.h>
//表示10个线程
#define THREAD_COUNT  10

pthread_mutex_t mutex;//互斥锁
pthread_spinlock_t spinlock;//自旋锁
//汇编语句
int inc(int *value,int add){
    int old;
    __asm__ volatile(
        "lock; xaddl %2, %1;"
        :"=a"(old)
        :"m"(*value),"a"(add)
        :"cc","memory"
    );
    return old;
}

void *thread_callback(void *arg) {
int *pcount = (int*)arg;
    int i = 0;
    while(i++ < 1000000){
#if 0//没加锁
        (*pcount)++;
#elif 0//互斥锁操作
    pthread_mutex_lock(&mutex);
          (*pcount)++;
    pthread_mutex_unlock(&mutex);
#elif 0//自旋锁操作
    pthread_spin_lock(&spinlock);
              (*pcount)++;
    pthread_spin_unlock(&spinlock);
#else//原子操作
    inc(pcount,1);


#endif
        usleep(1);//每买一次休眠以
    }
}

int main(){

    pthread_t threadid[THREAD_COUNT] = {0};

    pthread_mutex_init(&mutex,NULL);//互斥锁线程初始化
    pthread_spin_init(&spinlock,PTHREAD_PROCESS_SHARED);//自旋锁线程初始化
		//模拟十个窗口
    int i = 0;
    int count = 0;
    for (i = 0;i < THREAD_COUNT; i++) {
     pthread_create(&threadid[i],NULL,thread_callback,&count);
		//每一个秒刷新一次
    for(i=0;i<100;i++){
    printf("count:%d\n",count);
        sleep(1);
    }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值