<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>中文 &#187; z19881126</title>
	<atom:link href="http://software.intel.com/zh-cn/blogs/author/z19881126/feed/" rel="self" type="application/rss+xml" />
	<link>http://software.intel.com/zh-cn/blogs</link>
	<description></description>
	<lastBuildDate>Mon, 28 May 2012 14:23:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>程序运行时候. 中断. 异步. 还有多线程的一点小知识</title>
		<link>http://software.intel.com/zh-cn/blogs/2011/09/15/400008567/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2011/09/15/400008567/#comments</comments>
		<pubDate>Thu, 15 Sep 2011 06:47:03 +0000</pubDate>
		<dc:creator>z19881126</dc:creator>
				<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[并行计算]]></category>
		<category><![CDATA[软件开发工具]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2011/09/15/400008567/</guid>
		<description><![CDATA[  之前在用nesc编写协议栈代码的时候，遇到一些程序运行过程中的问题。各种问题。 比如在处理某包的时候，在程序任何运行时，都可能被硬件中断打断，可能被某个Timer,fired打断。而程序访问了很多的全局变量。。由于我对tinyos操作系统的一些同步异步机制不太了解，开始协议栈程序运行时，有时候出现一些莫名其妙的错误，当然后来仔细看了tinyOS操作系统的一些同步异步机制后，解决了一些问题。。 反正就是，应用程序在运行过程中，不像只是学和思考C语言编程那么简单。要考虑一些运行时的问题。。。。然后联想起以前学的UNIX高级编程和UNIX网络编程这两门课时候，学过一些线程同步那些章节，然后回顾了一下以前学的一些知识，简单小结一下。 为什么应用程序使用多线程；多线程的好处等，这里就不说了，没开发过这方面的大项目，不太清楚。只是知道书上说了那些描述性的好处。 简单总结一下。 多个线程会共享一些进程的静态数据段的资源，比如在主线程中定义的全局变量。肯定其他线程也能访问的。 在Unix, Linux平台下，我们利用互斥锁来处理全局变量的互斥问题。 考查互斥锁变量，利用互斥锁变量专门关联一个变量。 数据类型： pthread_mutex_t 初始化： pthread_mutex_t macPIB_mutex = PTHREAD_MUTEX_INITIALIZER; 操作函数:： int pthread_mutex_lock(pthread_mutex_t *mutex) //加锁函数，如果mutex被锁住了，此函数会阻塞程序，直到那个锁被释放。 int pthread_mutex_unlock(pthread_mutex_t *mutex) //解锁函数 互斥锁变量适合于防止同时访问某个共享变量，但是我们需要在等待某个条件发生期间让我们进入睡眠，而不是一直的轮询的查询。可以使用 条件变量的数据类型。 考查条件变量 数据类型： pthread_cond_t 初始化：pthread_cond_t count_cond = PTHREAD_COND_INITIALIZER; 操作函数： int pthread_cond_wait (pthread_cond_t *condptr, pthread_mutex_t *mutexptr) int pthread_cond_signal (pthread_cond_t *condptr) 注意，我们使一个全局变量，同时关联上一个互斥锁和一个条件变量。 然后如果在调用pthread_cont_wait的时候，已经被锁住了，则睡眠，同时释放mutexptr锁。 具体解释见UNIX网络编程的604-606页。 以上是关于多个线程对共享变量访问的互斥等问题。 我们在创建线程时，主线程需要给线程函数传递参数，注意，那个参数一定要注意，不能传指针。可以传值（C语言函数调用拷贝参数，支持）；或者在传之前，动态分配一个内存。具体的例子见UNIX网络编程的588-589页。以及以前课程的PPT。 程序运行的过程，应该还有很多需要学习的相关编程问题。多线程也应该是比较复杂的，很多用处的问题。今天先了解到这里。]]></description>
			<content:encoded><![CDATA[<p> </p>
<p>之前在用nesc编写协议栈代码的时候，遇到一些程序运行过程中的问题。各种问题。<br />
比如在处理某包的时候，在程序任何运行时，都可能被硬件中断打断，可能被某个Timer,fired打断。而程序访问了很多的全局变量。。由于我对tinyos操作系统的一些同步异步机制不太了解，开始协议栈程序运行时，有时候出现一些莫名其妙的错误，当然后来仔细看了tinyOS操作系统的一些同步异步机制后，解决了一些问题。。</p>
<p>反正就是，应用程序在运行过程中，不像只是学和思考C语言编程那么简单。要考虑一些运行时的问题。。。。然后联想起以前学的UNIX高级编程和UNIX网络编程这两门课时候，学过一些线程同步那些章节，然后回顾了一下以前学的一些知识，简单小结一下。</p>
<p>为什么应用程序使用多线程；多线程的好处等，这里就不说了，没开发过这方面的大项目，不太清楚。只是知道书上说了那些描述性的好处。</p>
<p>简单总结一下。</p>
<p>多个线程会共享一些进程的静态数据段的资源，比如在主线程中定义的全局变量。肯定其他线程也能访问的。</p>
<p>在Unix, Linux平台下，我们利用互斥锁来处理全局变量的互斥问题。</p>
<p>考查互斥锁变量，利用互斥锁变量专门关联一个变量。</p>
<p>数据类型： pthread_mutex_t</p>
<p>初始化： pthread_mutex_t macPIB_mutex = PTHREAD_MUTEX_INITIALIZER;</p>
<p>操作函数:：</p>
<p>int pthread_mutex_lock(pthread_mutex_t *mutex) //加锁函数，如果mutex被锁住了，此函数会阻塞程序，直到那个锁被释放。</p>
<p>int pthread_mutex_unlock(pthread_mutex_t *mutex) //解锁函数</p>
<p>互斥锁变量适合于防止同时访问某个共享变量，但是我们需要在等待某个条件发生期间让我们进入睡眠，而不是一直的轮询的查询。可以使用 条件变量的数据类型。</p>
<p>考查条件变量</p>
<p>数据类型： pthread_cond_t</p>
<p>初始化：pthread_cond_t count_cond = PTHREAD_COND_INITIALIZER;</p>
<p>操作函数：</p>
<p>int pthread_cond_wait (pthread_cond_t *condptr, pthread_mutex_t *mutexptr)</p>
<p>int pthread_cond_signal (pthread_cond_t *condptr)</p>
<p>注意，我们使一个全局变量，同时关联上一个互斥锁和一个条件变量。</p>
<p>然后如果在调用pthread_cont_wait的时候，已经被锁住了，则睡眠，同时释放mutexptr锁。</p>
<p>具体解释见UNIX网络编程的604-606页。</p>
<p>以上是关于多个线程对共享变量访问的互斥等问题。</p>
<p>我们在创建线程时，主线程需要给线程函数传递参数，注意，那个参数一定要注意，不能传指针。可以传值（C语言函数调用拷贝参数，支持）；或者在传之前，动态分配一个内存。具体的例子见UNIX网络编程的588-589页。以及以前课程的PPT。</p>
<p>程序运行的过程，应该还有很多需要学习的相关编程问题。多线程也应该是比较复杂的，很多用处的问题。今天先了解到这里。</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2011/09/15/400008567/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

