美文网首页
C++ 数据库读写多线程异步锁实现

C++ 数据库读写多线程异步锁实现

作者: skkily | 来源:发表于2021-01-05 15:50 被阅读0次

要求做一个主线程修改一个数据,子线程异步的读取数据,交给数据库的简单实现

思路

设计两个异步锁

  • [mutex_str]用来保护要读写的内容
  • [mutex_sql]用来表示此内容已经被主线程修改过,如果未修改内容则子进程阻塞

代码实现

#include <iostream>
#include <pthread.h>
#include <unistd.h>
#include <stdio.h>
using namespace std;
bool flag=false;

pthread_mutex_t mutex_str;//两个互斥锁
pthread_mutex_t mutex_sql;

char str=' ';

void *sql_thread(void* arg){
    while(flag){
        pthread_mutex_lock(&mutex_sql);
        pthread_mutex_lock(&mutex_str);
        sleep(1);//模拟操作
        cout<<"save str:"<<str<<endl;
        pthread_mutex_unlock(&mutex_str);
    }
    pthread_exit(NULL);
}


int main(){
    pthread_mutex_init(&mutex_str,NULL);//锁的初始化,也有静态方式初始化的
    pthread_mutex_init(&mutex_sql,NULL);

    volatile flag=true;//可以利用一个函数修改它停止子线程
    pthread_t sql_t;
    
    pthread_mutex_lock(&mutex_sql);//先锁住,子线程阻塞

    pthread_create(&sql_t,NULL,sql_thread,NULL);//创建子线程

    char i='a';
    while(true){
        i++;
        if(i>'z')
            i='a';
        pthread_mutex_lock(&mutex_str);
        str=i;
        sleep(1);
        cout<<"change str:"<<i<<endl;
        pthread_mutex_unlock(&mutex_str);
        pthread_mutex_unlock(&mutex_sql);
        usleep(1);
        //叫他睡眠一下,不然主线程做不耗时的循环会使得子线程没有机会抢占cpu
        //真实场景下是会有时间给子线程的,问题倒也不打,但模拟场景下现在只能这样了
        //求大佬指点
    }
    return 0;
}

【如果吧两个sleep和usleep去掉也可以看到线程之间的切换动作】

运行结果

相关文章

  • C++ 数据库读写多线程异步锁实现

    要求做一个主线程修改一个数据,子线程异步的读取数据,交给数据库的简单实现 思路 设计两个异步锁 [mutex_st...

  • leetcode第1114题:按顺序打印

    题目描述 考点 多线程 代码实现 注意利用了c++标准模板库中:mutex库; 参考资料 c++之多线程中“锁”的...

  • AbstractQueuedSynchronizer

    理解多线程的并发锁,可结合多进程的分布式锁(如Zookeeper的互斥锁、读写锁的实现原理),本质是相通的 介绍 ...

  • c++实现读写锁

    1.源码实现 2.编译源码 3.运行及其结果

  • [Python系列]Python多线程

    背景:说到多线程,我们会想到的是:异步编程、同步(锁)、共享变量、线程池等等,那么Python里面多线程是如何实现...

  • 备忘录之-iOS保证线程安全的锁和方法

    只要系统中存在多线程,存在共享资源,那么锁就是一个绕不过去的概念,像后台数据库读写数据就要用到读写锁,来保证数据的...

  • 高并发下Java多线程编程基础

    Java线程同步与异步 线程池 无锁化的实现方案 分布锁的实现方案 分享的目的: 进一步掌握多线程编程和应用的技巧...

  • iOS面试之多线程模块

    多线程 多线程内容如下: GCD NSOperation NSThread 多线程与锁 1.GCD 同步/异步和串...

  • iOS面试总结(初级)

    01:iOS推送机制,实现原理02:多线程编程,GCD,锁,同步异步队列03:property 各种关键字,以及...

  • 读写锁实现

    读写锁 ReentrantReadWriteLock可重入读写锁(实现ReadWriteLock接口) 使用:Re...

网友评论

      本文标题:C++ 数据库读写多线程异步锁实现

      本文链接:https://www.haomeiwen.com/subject/zvqwoktx.html