文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院程序开发其他语言ARM的嵌入式Linux移植体验之应用实例
精品推荐
特别推荐
·控制面板知多少
·给你十条学习Ruby语言的理由
·分页管理机制
·Perl 语言的重要价值体现
·经验技巧:分享两条Delphi开发经验
·Java编程思想:面向对象的逻辑思维方法
·Samba系统简介
热点TOP10
·程序八卦:胡子决定编程语言运势
·EZ-USB 68013A开发指南
·AIX 5L 学习大纲/简易教程(3)(未经许可,请勿COPY)
·Static和Final修饰类属性变量及初始化
·Servlet和Filter的url匹配url-pattern
·Flex挑战Java和.NET Adobe能否再度崛起?
·Java编程思想:面向对象的逻辑思维方法
·How to cross-compile OpenSSL for ARM
·在Pocket PC上编写游戏之十
·设计Pocket PC短消息服务简介

ARM的嵌入式Linux移植体验之应用实例

日期:2008年5月12日 作者: 查看:[大字体 中字体 小字体]


 if (semop(id, &lock_it, 1) == - 1)
 {
  printf("can not lock semaphore.\n");
  exit(1);
 }

 i = semctl(id, 0, GETVAL, 0);
 printf("value of semaphore at index 0 is %d\n", i);

 /*清除信号量*/
 semctl(id, 0, IPC_RMID, 0);
} 3. 线程控制/通信编程

  Linux本身只有进程的概念,而其所谓的"线程"本质上在内核里仍然是进程。大家知道,进程是资源分配的单位,同一进程中的多个线程共享该进程的资源(如作为共享内存的全局变量)。Linux中所谓的"线程"只是在被创建的时候"克隆"(clone)了父进程的资源,因此,clone出来的进程表现为"线程"。Linux中最流行的线程机制为LinuxThreads,它实现了一种Posix 1003.1c "pthread"标准接口。

  线程之间的通信涉及同步和互斥,互斥体的用法为:

pthread_mutex_t mutex;
pthread_mutex_init(&mutex, NULL); //按缺省的属性初始化互斥体变量mutex
pthread_mutex_lock(&mutex); // 给互斥体变量加锁
… //临界资源
phtread_mutex_unlock(&mutex); // 给互斥体变量解锁
  同步就是线程等待某个事件的发生。只有当等待的事件发生线程才继续执行,否则线程挂起并放弃处理器。当多个线程协作时,相互作用的任务必须在一定的条件下同步。Linux下的C语言编程有多种线程同步机制,最典型的是条件变量(condition variable)。而在头文件semaphore.h 中定义的信号量则完成了互斥体和条件变量的封装,按照多线程程序设计中访问控制机制,控制对资源的同步访问,提供程序设计人员更方便的调用接口。下面的生产者/消费者问题说明了Linux线程的控制和通信:

#include <stdio.h>
#include <pthread.h>
#define BUFFER_SIZE 16
struct prodcons
{
 int buffer[BUFFER_SIZE];
 pthread_mutex_t lock;
 int readpos, writepos;
 pthread_cond_t notempty;
 pthread_cond_t notfull;
};
/* 初始化缓冲区结构 */
void init(struct prodcons *b)
{
 pthread_mutex_init(&b->lock, NULL);
 pthread_cond_init(&b->notempty, NULL);
 pthread_cond_init(&b->notfull, NULL);
 b->readpos = 0;
 b->writepos = 0;
}
/* 将产品放入缓冲区,这里是存入一个整数*/
void put(struct prodcons *b, int data)
{
 pthread_mutex_lock(&b->lock);
 /* 等待缓冲区未满*/
 if ((b->writepos + 1) % BUFFER_SIZE == b->readpos)
 {
  pthread_cond_wait(&b->notfull, &b->lock);
 }
 /* 写数据,并移动指针 */
 b->buffer[b->writepos] = data;
 b->writepos++;
 if (b->writepos > = BUFFER_SIZE)
  b->writepos = 0;
 /* 设置缓冲区非空的条件变量*/
 pthread_cond_signal(&b->notempty);
 pthread_mutex_unlock(&b->lock);
}

/* 从缓冲区中取出整数*/
int get(struct prodcons *b)
{
 int data;
 pthread_mutex_lock(&b->lock);
 /* 等待缓冲区非空*/
 if (b->writepos == b->readpos)
 {
  pthread_cond_wait(&b->notempty, &b->lock);
 }
 /* 读数据,移动读指针*/
 data = b->buffer[b->readpos];
 b->readpos++;
 if (b->readpos > = BUFFER_SIZE)
  b->readpos = 0;
 /* 设置缓冲区未满的条件变量*/
 pthread_cond_signal(&b->notfull);
 pthread_mutex_unlock(&b->lock);

上一页 [1] [2] [3] [4] [5] 下一页 




上一篇:ARM的嵌入式Linux移植体验之设备驱动

下一篇:Continuation 和高级流程控制

相关文章:
·Photoshop CS3合成实例:人间天堂
·从零开始 无线网络终极应用宝典
·注册表应用100例—注册表使用全攻略之十一
·DataList嵌套实例
·WindowsXP应用技巧的具体总结
·Photoshop实例:制作超酷影片画面场景
·综合实例:PS洗衣粉包装设计印刷全攻略
·每周电脑应用技巧荟萃
·Photoshop精细抠像实例
·几何图形英文字体创意设计及应用作品欣赏
相关软件:
·中文版Excel 2003实例与技巧
·CorelDraw12 入门与实例(图文教程 菜鸟先飞系列教材)
·AutoCAD2002入门与实例详解
·鸟哥的linux私房菜:基础学习篇
·注册表实例应用视频教程swf
·Flash MX 动画制作实例教程
·Excel应用宝典
·PhotoShop7 设计百例 + 经典实例教程 + 滤镜教学
·AUTOCAD 2002机械设计应用与实例
·Flash MX 教程与实例精选

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.vipcn.net
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.vipcn.net All Rights Reserved. 鄂ICP备05000083号Powered by:viphot