linux线程学习
按照书上写的,不知道为什么有问题:
//已解决,参考最新的blog,哈哈
#include <stdlib.h>
#include <pthread.h>
#include <stdio.h>
#include <unistd.h> struct foo
{
int f_count;
pthread_mutex_t f_lock;
};
struct foo* AllocFoo()
{
foo* lpFoo = (foo*)malloc(sizeof(struct foo));
if(NULL != lpFoo)
{
lpFoo->f_count = 1;
if(0 != pthread_mutex_init(&lpFoo->f_lock,NULL))
{
printf("pthread_mutex_init error.\n");
free(lpFoo);
return NULL;
}
}
printf("Alloc a Foo.\n");
return lpFoo;
} bool DestoryFoo(foo* apFoo)
{
pthread_mutex_lock(&apFoo->f_lock);
if(--apFoo->f_count == 0)
{
printf("Now f_coount:%d.\n",apFoo->f_count);
pthread_mutex_unlock(&apFoo->f_lock);
pthread_mutex_destroy(&apFoo->f_lock);
free(apFoo);
printf("Destroy foo.\n");
return true;
}
else
{
printf("Now f_coount:%d.\n",apFoo->f_count);
pthread_mutex_unlock(&apFoo->f_lock);
return false;
}
} void HoldFoo(foo* apFoo)
{
pthread_mutex_lock(&apFoo->f_lock);
++apFoo->f_count;
printf("Now f_coount:%d.\n",apFoo->f_count);
pthread_mutex_unlock(&apFoo->f_lock);
} void PrintTids(const char* s); void* ThreadFun(void* Arg)
{
PrintTids("");
foo* lpFoo = (foo*)Arg;
for(int i=0;i<5;++i)
{
HoldFoo(lpFoo);
}
}
void PrintTids(const char* s)
{
pid_t lPid = getpid();
pthread_t lTid = pthread_self();
printf("%s pid:%u,tid:%u (0x%x).\n",s,(unsigned int)lPid
, (unsigned int)lTid,(unsigned int)lTid);
}
int main()
{
foo* lpFoo = AllocFoo();
pthread_t lTid = 0;
int lErr = pthread_create(&lTid,NULL,ThreadFun,NULL);
if(0 != lErr)
{
exit(1);
}
printf("main thread");
//HoldFoo(lpFoo);
bool lIsDestory = false;
do
{
lIsDestory = DestoryFoo(lpFoo);
}while(!lIsDestory);
}
linux线程学习的更多相关文章
- Linux线程学习(一)
一.Linux进程与线程概述 进程与线程 为什么对于大多数合作性任务,多线程比多个独立的进程更优越呢?这是因为,线程共享相同的内存空间.不同的线程可以存取内存中的同一个变量.所以,程序中的所有线程都可 ...
- Linux线程学习(二)
线程基础 进程 系统中程序执行和资源分配的基本单位 每个进程有自己的数据段.代码段和堆栈段 在进行切换时需要有比较复杂的上下文切换 线程 减少处理机的空转时间,支持多处理器以及减少上下文切换开销, ...
- Linux进程线程学习笔记:运行新程序
Linux进程线程学习笔记:运行新程序 周银辉 在上一篇中我们说到,当启动一个新进程以后,新进程会复制父进程的大部份上下 ...
- Linux线程互斥学习笔记--详细分析
一.互斥锁 为啥要有互斥? 多个进程/线程执行的先后顺序不确定,何时切出CPU也不确定. 多个进程/线程访问变量的动作往往不是原子的. 1. 操作步骤 (1)创建锁 // 创建互斥锁mutex pth ...
- Dubbo入门到精通学习笔记(十一):Dubbo服务启动依赖检查、Dubbo负载均衡策略、Dubbo线程模型(结合Linux线程数限制配置的实战分享)
文章目录 Dubbo服务启动依赖检查 Dubbo负载均衡策略 Dubbo线程模型(结合Linux线程数限制配置的实战分享) 实战经验分享( ** 属用性能调优**): Dubbo服务启动依赖检查 Du ...
- Linux内核学习笔记-2.进程管理
原创文章,转载请注明:Linux内核学习笔记-2.进程管理) By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...
- Linux内核学习笔记-1.简介和入门
原创文章,转载请注明:Linux内核学习笔记-1.简介和入门 By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...
- Linux kernel学习-内存管理【转】
转自:https://zohead.com/archives/linux-kernel-learning-memory-management/ 本文同步自(如浏览不正常请点击跳转):https://z ...
- Linux内核分析——Linux内核学习总结
马悦+原创作品转载请注明出处+<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 Linux内核学习总结 一 ...
随机推荐
- wifidog 源码初分析(4)-转
在上一篇<wifidog 源码处分析(3)>的流程结束后,接入设备的浏览器重定向至 路由器 上 wifidog 的 http 服务(端口 2060) /wifidog/auth 上(且携带 ...
- Mongo如何在多个字段中查询某个关键字?
If a text index has multiple fields in Mongo, how can I do a search in only one field since the weig ...
- OpenGL ES 3.0之Fragment buffer objects(FBO)详解(二)
我们可以使用帧缓冲对象来实现离屏渲染.帧缓冲对象支持下列操作 1.只使用OpenGL ES 函数创建帧缓冲区对象. 2.使用EGL context创建多个FBO. 3.创建离屏颜色.深度.模板渲染缓冲 ...
- Mybatis拦截器实现SQL性能监控
Mybatis拦截器只能拦截四类对象,分别为:Executor.ParameterHandler.StatementHandler.ResultSetHandler,而SQL数据库的操作都是从Exec ...
- Windows 服务安装教程
一.安装服务1.已管理员的身份启动CMD2.输入 cd C:\Windows\Microsoft.NET\Framework\v4.0.30319 回车3.输入 InstallUtil.exe Win ...
- jquery ready方法实现原理
先看这两句代码: window.addEventListener('load',loaded,false); document.addEventListener('DOMContentLoaded', ...
- APP测试体系
网上找的图片,总结的很好:
- Selenium2(webdriver)入门之TestNG的安装与简单使用
上一篇已经搭建好了Eclipse+selenium2的环境,这一篇主要记录下TestNG的使用. 一.在Eclipse中安装TestNG 1.打开eclipse-->help-->Inst ...
- Windows平台查看端口占用的程序
一.方法:管理员权限打开Cmd窗口:netstat -obna
- 使用MAVEN打JAR,直接使用
一.简单的方法: 首先在pom.xml里面添加: <build> <plugins> <plugin> <artifactId>maven-assemb ...