最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C基礎(chǔ) mariadb處理的簡(jiǎn)單實(shí)例

 更新時(shí)間:2016年06月12日 15:37:17   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇C基礎(chǔ) mariadb處理的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

引言

MariaDB 是一款灰常不錯(cuò)開(kāi)源數(shù)據(jù)庫(kù). 這里直接用它來(lái)解決業(yè)務(wù)問(wèn)題.

業(yè)務(wù)需求:

現(xiàn)在數(shù)據(jù)庫(kù)中表示按照天分表的. 突然我們需要按照月來(lái)處理數(shù)據(jù).

例如輸入一個(gè)玩家id, 查找這個(gè)玩家這個(gè)月內(nèi)看了一件事幾次. 我們先搭建一個(gè)環(huán)境.

操作系統(tǒng):

Linux version 4.4.0-22-generic (buildd@lgw01-41)
(gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) 
#40-Ubuntu SMP Thu May 12 22:03:46 UTC 2016

首先安裝 MariaDB數(shù)據(jù)庫(kù)

sudo apt-get install mariadb-server
sudo apt-get install mariadb-client
sudo apt-get install libmariadb2
sudo apt-get install libmariadb-client-lgpl-dev
sudo apt-get install libreoffice-mysql-connector

后面是C訪問(wèn) MariaDB驅(qū)動(dòng). 這里扯一點(diǎn), 目前關(guān)于MariaDB不懂問(wèn)題, 搜不見(jiàn)直接當(dāng)成mysql開(kāi)始搜.

MariaDB安裝成功后默認(rèn)是開(kāi)啟的, 看下面圖描述

后面搭建測(cè)試環(huán)境 首先 看 oss_musicelves.sql

-- MySQL dump 10.10
--
-- Host: localhost  Database: oss_log
-- ------------------------------------------------------
-- Server version  5.5.24-tmysql-1.4

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `oss_musicelves`
--

DROP TABLE IF EXISTS `oss_musicelves`;
CREATE TABLE `oss_musicelves` (
 `record_id` bigint(20) NOT NULL AUTO_INCREMENT,
 `account_id` bigint(20) NOT NULL,
 `server_id` int(11) NOT NULL,
 `char_id` bigint(20) NOT NULL,
 `char_sex` int(11) NOT NULL,
 `type_id` int(11) NOT NULL,
 `timeStamp` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
 `ptype` int(11) NOT NULL,
 `specifytype` int(11) NOT NULL,
 `childtype` int(11) NOT NULL,
 PRIMARY KEY (`record_id`),
 KEY `idx_specifytype` (`specifytype`)
) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=latin1;

--
-- Dumping data for table `oss_musicelves`
--


/*!40000 ALTER TABLE `oss_musicelves` DISABLE KEYS */;
LOCK TABLES `oss_musicelves` WRITE;
INSERT INTO `oss_musicelves` VALUES (1,411948833,84869352,27899597414400801,0,1812,'2016-05-31 14:27:41',0,1,1),(2,1344702709,90964200,30422720614402293,0,1812,'2016-05-31 14:58:26',0,1,1),(3,706409913,90964200,30422720614401465,1,1812,'2016-05-31 14:58:27',0,1,2),(4,706409913,392964857,30422720614401465,1,1812,'2016-05-31 14:58:59',0,2,4),(5,1344702709,392964857,30422720614402293,0,1812,'2016-05-31 14:58:59',0,2,4),(6,706409913,90964200,30422720614401465,1,1812,'2016-05-31 15:04:52',0,1,2),(7,706409913,392964857,30422720614401465,1,1812,'2016-05-31 15:05:54',0,2,4),(8,1344702709,392964857,30422720614402293,0,1812,'2016-05-31 15:05:54',0,2,4),(9,1344702709,90964200,30422720614402293,0,1812,'2016-05-31 15:10:29',0,1,1),(10,706409913,90964200,30422720614401465,1,1812,'2016-05-31 15:10:32',0,1,2),(11,1344702709,392964857,30422720614402293,0,1812,'2016-05-31 15:10:54',0,2,4),(12,3145910262,90964200,29520779366416374,1,1812,'2016-05-31 15:30:00',0,1,1),(13,1372825842,90964200,30173879500803314,1,1812,'2016-05-31 15:30:01',0,1,2),(14,3145910262,392964857,29520779366416374,1,1812,'2016-05-31 15:30:04',0,2,4),(15,1372825842,392964857,30173879500803314,1,1812,'2016-05-31 15:30:04',0,2,4),(16,3145910262,392964857,29520779366416374,1,1812,'2016-05-31 15:34:24',0,2,4),(17,1372825842,392964857,30173879500803314,1,1812,'2016-05-31 15:34:24',0,2,4),(18,706409913,90964200,30422720614401465,1,1812,'2016-05-31 15:40:14',0,1,1),(19,1344702709,90964200,30422720614402293,0,1812,'2016-05-31 15:40:16',0,1,2),(20,3145910262,392964857,29520779366416374,1,1812,'2016-05-31 15:42:19',0,2,4),(21,1372825842,392964857,30173879500803314,1,1812,'2016-05-31 15:42:19',0,2,4),(22,1027763684,90964200,30175730790400484,0,1812,'2016-05-31 16:56:33',1,1,1),(23,1372825842,90964200,30173879500803314,1,1812,'2016-05-31 16:56:50',0,1,2),(24,1372825842,392964857,30173879500803314,1,1812,'2016-05-31 16:57:37',0,2,3),(25,1027763684,392964857,30175730790400484,0,1812,'2016-05-31 16:57:37',1,2,3),(26,1372825842,392964857,30173879500803314,1,1812,'2016-05-31 17:04:33',0,2,3),(27,1027763684,392964857,30175730790400484,0,1812,'2016-05-31 17:04:33',1,2,3),(28,1027763684,90964200,30175730790400484,0,1812,'2016-05-31 17:14:15',1,1,2),(29,1372825842,392964857,30173879500803314,1,1812,'2016-05-31 17:14:50',0,2,3),(30,1027763684,392964857,30175730790400484,0,1812,'2016-05-31 17:14:50',1,2,3),(31,751699770,90964200,30175199027201850,1,1812,'2016-05-31 18:14:59',1,1,1);
UNLOCK TABLES;
/*!40000 ALTER TABLE `oss_musicelves` ENABLE KEYS */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

這個(gè) oss_musicelves.sql 文件主要功能是創(chuàng)建 oss_musicelves數(shù)據(jù)庫(kù), 并填充數(shù)據(jù).

還有一個(gè) 搭建環(huán)境 的 腳本 mariadb_test.sql 和上一個(gè)sql文件放在同一個(gè)目錄下

# 創(chuàng)建一個(gè)測(cè)試數(shù)據(jù)庫(kù)
create database oss_log;

# 進(jìn)入oss_log 數(shù)據(jù)庫(kù)
use oss_log;

# 創(chuàng)建 oss_musicelves 數(shù)據(jù)庫(kù), 并導(dǎo)入數(shù)據(jù)
source oss_musicelves.sql;

# 批量創(chuàng)建表和數(shù)據(jù)
create table 2016_6_1_oss_musicelves select * from oss_musicelves;
create table 2016_6_2_oss_musicelves select * from oss_musicelves;
create table 2016_6_3_oss_musicelves select * from oss_musicelves;
create table 2016_6_4_oss_musicelves select * from oss_musicelves;
create table 2016_6_5_oss_musicelves select * from oss_musicelves;
create table 2016_6_9_oss_musicelves select * from oss_musicelves;
create table 2016_6_10_oss_musicelves select * from oss_musicelves;
create table 2016_6_12_oss_musicelves select * from oss_musicelves;

# 查詢(xún)表是否創(chuàng)建成功
show tables;

# 這里處理 拿到的數(shù)據(jù)
select distinct table_name from information_schema.columns where table_name like '2016_6_%_oss_musicelves';

直接放在 MariaDB控制臺(tái)中直接刷進(jìn)去. 搭建的具體環(huán)境如下

到這里環(huán)境基本搭建好了. MariaDB入門(mén)等等, 完全可以當(dāng)做mysql 學(xué)習(xí)溫故一遍.

前言

上面問(wèn)題就是 原本 是 select * from oss_musicelves; 就可以解決的問(wèn)題.

這里 需要 輸入年和月 外加一些特殊條件 . select * from %_%_%_oss_musicelves; 解決. 單純用sql腳本也可以解決.非常復(fù)雜.用的不熟.

這里首先通過(guò) shell 腳本處理

touch getmouths.sh
chmod +x getmouths.sh
vi getmouths.sh

 具體的腳本 內(nèi)容 如下

#!/bin/sh

#得到輸入的玩家ptid
if [ $# -lt 1 ]
then
  echo "uage: $0 [ptid]"
  exit -1
fi
ptid=$1

mouth=$(date +%m | sed s'/^0//')
#第一個(gè)參數(shù)是月份
if [ $# -ge 2 ]
then
  mouth=$2
fi

#第二個(gè)參數(shù)是年
year=$(date +%Y)
if [ $# -ge 3 ]
then
  year=$3
fi

#得到查詢(xún)的隨機(jī)表名
tbname="\"${year}_${mouth}_%_oss_musicelves\""

#這里得到mysql 中所有合法表名
rm -rf __tmp
touch __tmp

#開(kāi)始查詢(xún)數(shù)據(jù)庫(kù)了, 需要以root權(quán)限啟動(dòng)這個(gè)腳本
mysql -e "select distinct table_name from information_schema.columns where table_name like $tbname" | awk 'NR>1' | while read name
do
  mysql -e "select count(*) from oss_log.$name where specifytype = 1 and char_id = $ptid" | awk 'NR>1' | while read cut
  do
    echo "$name : $cut"
    echo $cut >> __tmp
    break
  done
done

#統(tǒng)計(jì)表里面的數(shù)據(jù)
sum=$(cat __tmp | awk '{s+=$1} END {print s}')
rm -rf __tmp

# 最后輸出統(tǒng)計(jì)結(jié)果
echo "$year-$mouth sum: $sum"

使用腳本  截圖

通過(guò)shell可以完成 我們的需求. Linux上shell真好用. window的bat不好用.

正文

第一部分 : 讓C調(diào)用MariaDB跑通

先看 測(cè)試Demo mariadb_demo.c

#include <stdio.h>
#include <stdlib.h>
#include <mysql.h>

/*
 * 第一個(gè) mariadb程序
 */
int main(int argc, char *argv[]) {
  // 創(chuàng)建數(shù)據(jù)連接對(duì)象
  MYSQL *con = mysql_init(NULL);
   if (con == NULL) {
    fprintf(stderr, "%s\n", mysql_error(con));
    exit(EXIT_FAILURE);
   }

   if (!mysql_real_connect(con, "localhost", "root", "", NULL, 0, NULL, 0)) {
    fprintf(stderr, "%s\n", mysql_error(con));
     mysql_close(con);
     exit(EXIT_FAILURE);
   } 

   if (mysql_query(con, "show databases;")) {
    fprintf(stderr, "%s\n", mysql_error(con));
    mysql_close(con);
    exit(EXIT_FAILURE);
   }

  puts("mariadb is connect and run succesed!");
  mysql_close(con);  

  return 0;
}

具體的編譯 命令

su root
gcc -Wall -ggdb2 -I/usr/include/mariadb -o mariadb_demo.out mariadb_demo.c -lmysqlclient
./mariadb_demo.out 

運(yùn)行結(jié)果 如下 

到這里基本C 調(diào)用 MariaDB 基本流程跑通了. 但是很不爽. 只能通過(guò)root用戶(hù)使用.

那我們改變這里不爽. 進(jìn)入第二部分. 擴(kuò)展資料  c in mariadb  http://stackoverflow.com/questions/17265471/using-mariadb-in-c

第二部分 : 通過(guò)普通用戶(hù)完成業(yè)務(wù)需求.

先創(chuàng)建普通用戶(hù) csz, 密碼是 1413222, 并并且給其 select 讀權(quán)限

su root
mysql

drop user csz;
create user 'csz'@'%' identified by '13142222';
grant select on *.* to 'csz'@'%';
# 立即刷新
flush privileges;

后面登錄試試

mysql -ucsz -p1314222 -h127.0.0.1

 

 主要是mariadb默認(rèn)關(guān)閉遠(yuǎn)程訪問(wèn). 后面我們開(kāi)啟安全訪問(wèn)模式試試

su root/etc/init.d/mysql stopmysqld_safe --skip-grant-tables

 

后面再開(kāi)啟一個(gè)會(huì)話 . 重新輸入 mysql -ucsz -p1314222 -h127.0.0.1 , 解決可以了
 

#目標(biāo)拼接 串內(nèi)容
select sum(c) from (
select count(*) as c from 2016_6_1_oss_musicelves where specifytype=1 and char_id = 30422720614402293
union all
select count(*) from 2016_6_2_oss_musicelves where specifytype=1 and char_id = 30422720614402293
union all
select count(*) from 2016_6_3_oss_musicelves where specifytype=1 and char_id = 30422720614402293
union all
select count(*) from 2016_6_4_oss_musicelves where specifytype=1 and char_id = 30422720614402293
union all
select count(*) from 2016_6_5_oss_musicelves where specifytype=1 and char_id = 30422720614402293
union all
select count(*) from 2016_6_9_oss_musicelves where specifytype=1 and char_id = 30422720614402293
union all
select count(*) from 2016_6_10_oss_musicelves where specifytype=1 and char_id = 30422720614402293
union all
select count(*) from 2016_6_12_oss_musicelves where specifytype=1 and char_id = 30422720614402293
) as t;

具體看 getmouths.c 文件 內(nèi)容

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <mysql.h>

#define _INT_BUF (4098)
// 得到查詢(xún)數(shù)據(jù)表內(nèi)容
#define _STR_SQLTABLES \
  "select distinct table_name from information_schema.columns where table_name like '%d_%d_%%_oss_musicelves'"
#define _STR_SQLSELECT \
  "select count(*) as c from %s where specifytype=1 and char_id = %lld"

// 基礎(chǔ)的mariadb 錯(cuò)誤關(guān)閉函數(shù)
static inline void _err_mariadb(MYSQL *con) {
  fprintf(stderr, "_err_mariadb error: %s\n", mysql_error(con));
  mysql_close(con);
  exit(EXIT_FAILURE);
}

/*
 * 處理 oss_musicelves 一個(gè)月的所有表.
 */
int main(int argc, char* argv[]) {
  long long ptid;
  time_t rt = time(NULL);
  struct tm *pt = localtime(&rt);
  int year = pt->tm_year + 1900;
  int mouth = pt->tm_mon + 1;  

  // 先簡(jiǎn)單檢測(cè)輸入
  if(argc <= 1) {
    fprintf(stderr, "%s [ptid] [mouth] [year]\n", argv[0]);
    exit(EXIT_FAILURE);
  }  

  // 先得到 ptid 數(shù)據(jù)
  ptid = atoll(argv[1]);  
  // 得到當(dāng)前月份
  if(argc >= 3)
    mouth = atoi(argv[2]);
  // 得到當(dāng)前年份
  if(argc >= 4)
    year = atoi(argv[3]);
  // 簡(jiǎn)單檢測(cè)結(jié)果是否合法
  if(ptid < 0 || mouth <=0 || mouth>12 || year<1900) {
    fprintf(stderr, "%s %lld %d %d is error!\n", argv[0], ptid, mouth, year);
    exit(EXIT_FAILURE);
  } 

  // 輸出結(jié)果
  printf("%s %lld %d %d start run!\n", argv[0], ptid, mouth, year);

  // 開(kāi)始用mysql 訪問(wèn)我們需要訪問(wèn)的數(shù)據(jù)結(jié)果了
  MYSQL *con = mysql_init(NULL);
  if(con == NULL) {
   fprintf(stderr, "mysql_init error: %s\n", mysql_error(con));
   exit(EXIT_FAILURE);
   }
   if(!mysql_real_connect(con, "127.0.0.1", "csz", "1314222", "oss_log", 0, NULL, 0))
    _err_mariadb(con);
  
  char sqls[_INT_BUF];
  int sqlen = 0;
  sprintf(sqls, _STR_SQLTABLES, year, mouth);
  if(mysql_query(con, sqls))
    _err_mariadb(con);
  
  // 開(kāi)始得到結(jié)果
  MYSQL_RES *ret = mysql_store_result(con);
  if(NULL == ret)
    _err_mariadb(con);
  MYSQL_ROW row;
  int i = 0, nr = 0;
  while(!!(row = mysql_fetch_row(ret))) {  
    if(i == 0) {
      sqlen = sprintf(sqls, "select sum(c) from (\n" _STR_SQLSELECT, row[0], ptid);
      i = 1;
      continue;
    }    
    // 后面正常拼接
    nr = sprintf(sqls + sqlen, "\nunion all\n" _STR_SQLSELECT, row[0], ptid);
    if((sqlen += nr) >= _INT_BUF) {
      fprintf(stderr, "sprintf while %d too length.\n", sqlen);
      goto __return_free;
    }
  }
  if(i == 0)   {
    printf("sum %lld %d/%d: 0\n", ptid, year, mouth);
    goto __return_free;
  }
  
  // 這里處理有的數(shù)據(jù)
  nr = sprintf(sqls + sqlen, "\n) as t;");  
  if((sqlen += nr) >= _INT_BUF) {
    fprintf(stderr, "sprintf end %d too length.\n", sqlen);
    goto __return_free;
  }
  // 內(nèi)存用完了就直接釋放
  mysql_free_result(ret);
  ret = NULL;
  

  printf("sql : \n\t%s\n", sqls);
  // 開(kāi)始輸出統(tǒng)計(jì)結(jié)果
  if(mysql_query(con, sqls))
    _err_mariadb(con);
  if((ret = mysql_store_result(con))==NULL)
    _err_mariadb(con);
  //得到結(jié)果直接返回
  if(!!(row=mysql_fetch_row(ret)))
    printf("sum %lld %d/%d: %s\n", ptid, year, mouth, row[0]);
  else
    puts("select is empty!");

    
__return_free:
  // 釋放用過(guò)的內(nèi)存
  mysql_free_result(ret);
  // 關(guān)閉打開(kāi)的 數(shù)據(jù)庫(kù)訪問(wèn)對(duì)象
   mysql_close(con);
  return 0;
}

編譯命令

gcc -Wall -ggdb2 -I/usr/include/mariadb -o getmouths.out getmouths.c -lmysqlclient

最終運(yùn)行結(jié)果是

如果想詳細(xì)了解關(guān)于mariadb c驅(qū)動(dòng)的api使用, 可以參照老外寫(xiě)的很好理解.

 mysqlc demo http://zetcode.com/db/mysqlc/

到這里就結(jié)束了, 關(guān)于C 訪問(wèn)數(shù)據(jù)庫(kù)能力也基本打通了.

后記

錯(cuò)誤是難免, 歡迎學(xué)習(xí)進(jìn)步~~~   未來(lái)什么都不確定, 可以確定是沒(méi)有未來(lái), 只有現(xiàn)在還在裝逼 . 

以上這篇C基礎(chǔ) mariadb處理的簡(jiǎn)單實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++ 二維(多維)vector添加一個(gè)空項(xiàng)問(wèn)題

    C++ 二維(多維)vector添加一個(gè)空項(xiàng)問(wèn)題

    這篇文章主要介紹了C++ 二維(多維)vector添加一個(gè)空項(xiàng)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C++與QML交互的項(xiàng)目實(shí)踐

    C++與QML交互的項(xiàng)目實(shí)踐

    本文主要介紹了C++與QML交互的項(xiàng)目實(shí)踐,將詳細(xì)介紹C++與QML的交互方式,包括在QML中調(diào)用C++函數(shù)和在C++中訪問(wèn)QML元素,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • C語(yǔ)言 指針的初始化賦值案例詳解

    C語(yǔ)言 指針的初始化賦值案例詳解

    這篇文章主要介紹了C語(yǔ)言 指針的初始化賦值案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C語(yǔ)言實(shí)現(xiàn)經(jīng)典掃雷游戲流程

    C語(yǔ)言實(shí)現(xiàn)經(jīng)典掃雷游戲流程

    掃雷是電腦上很經(jīng)典的游戲,特意去網(wǎng)上玩了一會(huì),幾次調(diào)試之后,發(fā)現(xiàn)這個(gè)比三子棋要復(fù)雜一些,尤其是空白展開(kāi)算法上和堵截玩家有的一拼,與實(shí)際游戲差別較大,不能使用光標(biāo),下面來(lái)詳解每一步分析
    2021-11-11
  • 使用Cline+deepseek實(shí)現(xiàn)VsCode自動(dòng)化編程

    使用Cline+deepseek實(shí)現(xiàn)VsCode自動(dòng)化編程

    Cline是一個(gè)免費(fèi)且強(qiáng)大的VSCode插件,可以接入多種大模型API進(jìn)行對(duì)話式編程,本文主要介紹了使用Cline+deepseek實(shí)現(xiàn)VsCode自動(dòng)化編程,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-01-01
  • C語(yǔ)言中static的使用方法實(shí)例詳解

    C語(yǔ)言中static的使用方法實(shí)例詳解

    static一般用于修飾局部變量,全局變量,函數(shù),下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中static用法的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • C語(yǔ)言多線程開(kāi)發(fā)中死鎖與讀寫(xiě)鎖問(wèn)題詳解

    C語(yǔ)言多線程開(kāi)發(fā)中死鎖與讀寫(xiě)鎖問(wèn)題詳解

    死鎖是指多個(gè)線程因競(jìng)爭(zhēng)資源而造成的僵局(互相等待);有些公共數(shù)據(jù)修改的機(jī)會(huì)很少,但其讀的機(jī)會(huì)很多。并且在讀的過(guò)程中會(huì)伴隨著查找,給這種代碼加鎖會(huì)降低我們的程序效率。讀寫(xiě)鎖可以解決這個(gè)問(wèn)題;
    2022-05-05
  • c語(yǔ)言中static和extern的用法詳細(xì)解析

    c語(yǔ)言中static和extern的用法詳細(xì)解析

    以下是對(duì)c語(yǔ)言中static和extern的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2013-09-09
  • mfc文件操作CFile類(lèi)之創(chuàng)建文件的方法

    mfc文件操作CFile類(lèi)之創(chuàng)建文件的方法

    這篇文章主要介紹了mfc文件操作CFile類(lèi)之創(chuàng)建文件的方法,需要的朋友可以參考下
    2019-04-04
  • C++ 內(nèi)聯(lián)函數(shù)詳解

    C++ 內(nèi)聯(lián)函數(shù)詳解

    內(nèi)聯(lián)函數(shù)是c++為了提高程序的運(yùn)行速度做的改進(jìn),本片文章詳細(xì)介紹了C++ 的內(nèi)聯(lián)函數(shù),本文就來(lái)詳細(xì)的介紹一下,感興趣的朋友可以了解一下
    2021-11-11

最新評(píng)論

福海县| 昭觉县| 玉环县| 阿勒泰市| 华宁县| 封开县| 紫云| 兴宁市| 称多县| 东海县| 尉氏县| 新兴县| 龙里县| 乌兰察布市| 永定县| 台江县| 攀枝花市| 本溪| 泰来县| 龙井市| 建昌县| 韶关市| 汕头市| 武城县| 黔东| 拉萨市| 汉阴县| 竹北市| 区。| 曲靖市| 瑞金市| 南京市| 曲阳县| 桃园县| 弥勒县| 湖北省| 崇仁县| 兴安盟| 镇沅| 菏泽市| 永宁县|