linux多线程写文件 锁,linux C++多线程操作文件&输出加锁

下述demo将指定目录下文件存入vector,然后一分为二交给两个线程(threadTask1,threadTask2)去分别处理,对输出函数printDirent加锁防止紊乱。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

static pthread_mutex_t testlock;

using namespace std;

void *threadTask1(void *ptr);

void *threadTask2(void *ptr);

typedef vector VECTORDIRENT;

VECTORDIRENT listDirent;

VECTORDIRENT::iterator iter;

void printStr(string buff);

void printDirent(struct dirent ptrTest);

void *threadTask1(void *ptr)

{

int vectorI=0;

int vectorLen = listDirent.size()/2;

int count=0;

for(;vectorI

{

printDirent(listDirent[vectorI]);

count++;

}

}

void *threadTask2(void *ptr)

{

int vectorI=listDirent.size()/2;

int vectorLen = listDirent.size();

int count=0;

for(;vectorI

{

printDirent(listDirent[vectorI]);

count++;

}

}

void printDirent(struct dirent ptrTest){

pthread_mutex_lock(&testlock);

cout<

pthread_mutex_unlock(&testlock);

}

int main(void)

{

DIR *dirTest;

struct dirent *ptrTest;

string testFolderPathName = "/home/undoner/";

dirTest = opendir(testFolderPathName.data()); ///open the dir

int fileCount = 0;

while((ptrTest = readdir(dirTest)) != NULL) ///read the list of this dir

{

if(ptrTest->d_type==8){

listDirent.push_back(*ptrTest);

}

}

cout<

cout<

for (iter = listDirent.begin(); iter != listDirent.end(); ++iter) {

cout << iter->d_name << " ";

}

pthread_t thread1,thread2;

int ret1,ret2;

ret1=pthread_create(&thread1,NULL,threadTask1,NULL);

ret2=pthread_create(&thread2,NULL,threadTask2,NULL);

//ret3=pthread_create(&thread3,NULL,thread,NULL);

if(ret1!=0){

printf ("Create pthread error!\n");

exit (1);

}

if(ret2!=0){

printf ("Create pthread error!\n");

exit (1);

}

pthread_join(thread1,NULL);

pthread_join(thread2,NULL);

return 0;

}

Linux下多线程复制文件(C)

Linux下实现多线程文件复制,使用提供的函数: int pthread_create(pthread_t *thread,const pthread_attr_t ...

linux exec操作文件描述符

linux每一个打开文件都会关联一个文件描述符,需要的时候我们可以使用exec命令指定一个大于3的数字作为文件 linux默认文件描述符 每打开一个shell就会打开默认的三个文件描述符描0,1,2, ...

Linux目录结构以及文件操作

Linux目录结构 UNIX 是以目录为主的,Linux 也继承了这一优良特性. Linux 是以树形目录结构的形式来构建整个系统的,可以理解为树形目录是一个用户可操作系统的骨架.虽然本质上无论是目录 ...

Linux基础命令之文件和目录操作(二)

. find 用于查找目录下的文件,也可以调用其他命令使用 find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression] fi ...

Linux C高级编程——文件操作之系统调用

Linux C高级编程文件操作之系统调用 宗旨:技术的学习是有限的,分享的精神是无限的.           库函数是一些完毕特定功能的函数.一般由某个标准组织制作公布,并形成一定的标准.使用库函数编 ...

linux c编程:文件的操作

在Linux系统中,系统是通过inode来获得这个文件的信息.在Linux系统中,inode的信息都是封装在stat这个结构体中.可以通过man 2 stat来查看stat的具体结构.从中可以看到包含 ...

【转】【整理】将Linux脚本中的正常输出,警告,错误等信息输出到文件中

本文来自:http://blog.csdn.net/woshinia/article/details/18040063   很早以前  编译的时候 就在用 2>&1,但是一直没有生成一 ...

ubuntu chmod 无法更改 文件夹权限 系统提示&OpenCurlyDoubleQuote;不允许的操作 2、linux 如何修改只读文件 3、ubuntu安装

1.ubuntu chmod 无法更改 文件夹权限 系统提示“不允许的操作 答案:需要超级用户权限 sudo 2.linux 如何修改只读文件 答案:可以使用chmod命令,为改文件提供其他的权限.u ...

java文件操作(输出目录、查看磁盘符)

问题描述:     java操作文件,所有硬盘中所有文件路径 问题解决:     (1)查看所有磁盘文件 注:     如上所示,使用接口 File.listRoots()可以返回所有磁盘文件,通过f ...

随机推荐

toUnsignedString详解

/** * All possible chars for representing a number as a String */ final static char[] digits = { '0' ...

NOIP&OpenCurlyDoubleQuote;对偶”题:还教室

先说一下思路: 方差可以经过恒等变形变成 x12 + x22 + ... + xn2 + 2a(x1 + x2 + ... + xn) + na2 所以维护平方和.连续和即可 平均数我就不再推了…… ...

crossplatform---Nodejs in Visual Studio Code 05&period;Swig&plus;Bootstrap

1. 开始 准备好Express+Swig的练习代码:https://github.com/Mengkzhaoyun/nodepractise 准备好AdminLTE后台管理模版:https://ww ...

【转】循环递归遍历XML文档或按某要求遍历XML文档

<?xml version="1.0" encoding="UTF-8"?>

&lbrack;js&rsqb; webgl 初探 - 绘制三角形

摘要: 1. webgl 概念挺多的, 顶点着色器.片段着色器, 坐标 2. 绘制前期准备工作好多 目前看的比较好的教材: https://developer.mozilla.org/zh-CN/do ...

小白的REDIS学习(二)-链表

本文为读的记录.该书以Redis2.9讲解Redis相关内容.请注意版本差异. Redis使用C语言,实现了自己的链表结构,实现的代码如下 //集成了链表的各类信息 ...

C&num;新功能--命名参数

命名参数会潜在的改变编写代码的方式.这个新功能能使代码更容易阅读和理解. 例如,看一下System.IO名称空间中的File.Copy()方法,它一般构建为 File.Copy(@"C:\m ...

Oracle&&num;160&semi;关闭数据库&lpar;未使用Oracle&&num;160&semi;Restart&rpar;

Oracle关闭数据库(未使用Oracle Restart) by:授客 QQ:1033553122 SHUTDOWN [选项] 选项说明: NORMAL-语句执行后,不允许创建新的连接:等待所有当前 ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值