
c++
ydsungan
这个作者很懒,什么都没留下…
展开
-
C++使用std::thread 多线程展开for循环,for循环并行计算
比如说有一个for循环,需要迭代100次,来累加1+2+3…+100计算其结果,创建10个线程,第一个线程累加1+2+…+10,第二个线程计算11+12+…+20等。那么如何优化呢?其实OpenMP库是可以直接调用的,只需要在for循环上面加一个指令 “#pragma omp parallel for num_threads(10)” 即可,非常简单。Intel TBB 线程库也可以很简单的做到,具体不介绍下面介绍如何使用标准库std::thread手动分割任务 。如果任务数除以线程数有余数,那么把.原创 2022-05-28 16:53:07 · 8697 阅读 · 0 评论 -
Intel TBB 提供的 自旋的读写锁 spin_rw_mutex.h speculative_spin_rw_mutex
Intel TBB的自旋的读写锁简单代码示例原创 2022-05-27 21:39:00 · 679 阅读 · 0 评论 -
Intel TBB 线程安全 ,支持并发的concurrent_hash_map
需要安装intel 的tbb库,怎么安装,请另查编译时加上-ltbb -pthread即可。eg. g++ test.cc -ltbb -pthread比自己用c++的unordered_map和加锁mutex性能要高不少#include <iostream>#include <tbb/concurrent_hash_map.h>using namespace std;int main() { tbb::concurrent_hash_map<in.原创 2022-05-25 14:25:47 · 757 阅读 · 0 评论 -
TSX指令集之RTM无锁并发能加快速度吗?与mutex加锁比较
下面是实验代码和截图。需要确保自己的服务器CPU能支持RTM指令集,如何查看能否支持RTM指令集不做介绍编译指令:g++ test4.cc -std=c++11 -pthread -mrtm-mrtm表示使用rtm指令集,需要导入头文件#include <immintrin.h>#include <immintrin.h>#include <sys/time.h>#include <iostream>#include <thread&原创 2022-05-24 14:41:35 · 660 阅读 · 0 评论 -
TSX指令集中的 RTM 受限的事务内存 来实现并发无锁编程
RTM 功能的头文件可以引入#include <immintrin.h>以下文件编译指令g++ test.cc -pthread -std=c++11 -mrtm前提是你的服务器支持RTM指令集,通过cat /proc/cpuinfo查看flags一项中是否包含rtm即可:cat /proc/cpuinfo | grep rtm下面的程序的输出结果为100,因为有10个线程,每个线程在a上面累加10,输出结果为100,符合预期。RTM指令集包括4个函数:_xbegin(),_xend(.原创 2022-05-24 14:04:20 · 697 阅读 · 0 评论 -
C++空闲内存空间简单管理
#include <stdlib.h>#include <iostream>using namespace std;typedef struct Node { int a; int b;} Node;int main() { char * free_node = nullptr; Node* n1 = (Node*) malloc(sizeof(Node)); n1->a = 1; Node* n2 = (Node原创 2022-05-19 21:15:57 · 251 阅读 · 0 评论 -
SSE2指令集 SIMD指令 之 _mm_cmpeq_epi8 来比较俩个字符串
__builtin_ffs(x)是gcc 内建函数,具体意义另查。只提供简单代码,使用SSE2指令集,使用SIMD来加速字符串比较。当然不一定是字符串比较,示例中的arr1和arr2也可以看成是其他类型的数据的一种封装。最后,while循环里面输出的jj就是arr1和arr2中每一个字符相同的位置。#include "hash_util.h"#include <stdio.h>#include <immintrin.h>#include <assert.h>原创 2022-05-09 15:05:21 · 2003 阅读 · 0 评论 -
Linux pthread.h 中的 pthread_create创建线程 循环传递参数
看了一圈,外面垃圾博客太多,全是抄袭,每一个提到要点。#include <stdio.h>#include <string.h>#include <pthread.h>void* print(void* data){ printf("%d\n", (int) (long long) data);}int main(){ pthread_t tid[3]; for (int i = 0; i < 3; i++) {原创 2022-05-08 20:44:58 · 434 阅读 · 0 评论 -
c++中的vector清空容器
注意:clear()方法只清空size(),不清空capacity()swap()方法俩者都清空#include <iostream>#include <vector>#include <string>using namespace std;class People{public: static vector<int> a;};vector<int> People::a(0);int main()原创 2021-08-06 11:24:18 · 979 阅读 · 0 评论 -
error: ‘dynamic_cast’ not permitted with -fno-rtti
在使用nan方式的nodejs的c++扩展时,使用node-gyp编译c++源码时,报错error: ‘dynamic_cast’ not permitted with -fno-rtti是因为在c++源码中使用了dynamic_cast类型强转而报错,这个dynamic_cast需要有RTTI的支持,所以在binding.gyp的配置文件中加上:'cflags_cc!': [ '-fno-rtti' ] 就可以了。...原创 2021-08-02 13:58:53 · 994 阅读 · 0 评论 -
C++中dynamic_cast简单例子
#include <iostream>using namespace std;class Animal{public: virtual void eat() = 0;};class Dog: public Animal{public: virtual void eat(){ cout << "狗狗吃东西" << endl; } void bite(){原创 2021-08-02 13:45:39 · 194 阅读 · 0 评论 -
Nodejs用Nan的方式C++扩展并调用C++动态链接库
0.说明nodejs调用c++扩展有多种方式,这里使用Nan方式1.环境centos 7;nodejs v12.22node-gyp2.安装nan如下图所示,项目目录名为nan-test,首先在该项目目录下安装nan,npm install --save nan,安装成功后在项目目录下出现一个node_modules,里面有一个nan目录3.制作一个测试用的动态库如上图shared目录所示,calculate.hdouble add(double a, double b);doubl原创 2021-08-02 11:59:10 · 1068 阅读 · 0 评论 -
makefile中使用带颜色的字体(红色、绿色)打印到终端
效果原创 2021-07-27 14:21:02 · 1518 阅读 · 0 评论 -
C语言调用friso库实现中文分词器
friso中文分词器库的安装及详细说明见github:https://github.com/lionsoul2014/friso/tree/bb35f949efaeb26f33723719dad9adfd4e283995#include <friso/friso.h>#include <stdio.h>#include <string.h>//安装目录中的配置文件位置char* setting_file_addr = "/root/friso/friso.原创 2021-07-13 22:56:18 · 619 阅读 · 1 评论 -
Linux中C语言使用openssl的加密算法库实现md5,sha2,hmac等哈希算法
需要提前在linux中安装openssl#include <openssl/md5.h>#include <string.h>#include <stdio.h>#include <openssl/sha.h>#include <openssl/hmac.h>void genMD5(unsigned char* output_md5, const char* msg){ MD5_CTX ctx; MD原创 2021-07-13 22:52:34 · 1360 阅读 · 0 评论 -
Linux中通过编写makefile将多个C语言文件编译成一个动态链接库
环境:centos7写头文件:在测试文件夹test目录下,建立一个mycompute目录,专门用于存放.h头文件,如下图所示:四个.h头文件内容分别是:add.hsub.hmul.hdiv.h写.c程序:在测试目录test中写四个h头文件中申明的函数的实现。add.cint add(int a, int b){ return a + b;}sub.cint sub(int a, int b){ return a - b;}mul.cint mul(int原创 2021-07-13 22:44:23 · 3068 阅读 · 2 评论 -
vs2019创建windows上的c++动态链接库
1. 创建项目设置成x64创建一个vs的动态链接库项目,如下图所示创建完成后附带文件如下图所示2.编写项目创建一个头文件add.h,创建一个源文件add.cpp完成加法运算,add.h代码如下:#pragma once#ifdef ADD_H#define API_SYMBOL __declspec(dllexport)#else#define API_SYMBOL __declspec(dllimport)#endifextern "C" API_SYMBOL int a原创 2021-07-04 10:56:15 · 450 阅读 · 0 评论