主线程和子线程总结

 
 运行结果
 
 
 
  
 
从上面可以看到:
【1】 如果主线程和子线程是并行的,虽然都是用while(1)但是倚靠

CPU的调度,主线程和子线程都有机会得到执行。

【2】 如果要在子线程里面改变主线程里面的数,就在 pthread_create

里面的最后 一个参数使用传地址调用(void *)&c,否则使用传值调用(void *)c

【3】使用pthread_join的目的在于:怕主线程执行的过快,子线程还没有执行
主线程就执行完毕并且退出了。
使用detach属性的目的在于,使得主线程和子线程之间割断联系,主线程退出
子线程也不会挂掉,子线程 退出,主线程也不用回收子线程的资源。

因为在本例子中,主线程和子线程都是无限循环执行的,即寿命无限长,主线程
和子线程也不用关心谁先得到执行,也不用关心资源的回收,所以调用pthread_create
的使用也就没有回收pthread_t tt这个用于管理子设备号的ID,也没用调用pthread_join来
等待子线程退出。
 
 这是一个可以精确控制线程何时结束的例子。
【1】线程里面使用while循环不断的执行。如果想要使得线程
结束运行,只要使得那个enable = false就OK了。

【2】这里主线程创建子线程之后,使用pause();函数,主线程
就一直阻塞在pause函数里面,直到捕捉到某个信号,这里面
定义的是ctrl+c信号,捕捉到ctrl+c后,程序跳转到了函数handler
_mini里面执行。

【3】然后就往下执行,执行pthread_join回收子线程的资源。最后
返回。
程序执行结果如下:
 
  
 如果程序不适用signal注册,而是直接用pause函数
那么,程序接收到信号后,默认是终结整个进程
 
  

### 回答1: 在Python 2.6中,可以使用 `thread` 模块来创建线程。当线程没有执行完毕时,线程会被阻塞。 为了避免这种情况,可以使用 `threading` 模块。该模块提供了更好的线程管理功能,包括线程同步、线程锁等。 下面是一个使用 `threading` 模块创建线程的示例代码: ```python import threading def worker(): # 线程的工作内容 print("线程开始执行...") # 执行一些任务 print("线程执行完毕!") # 创建线程 t = threading.Thread(target=worker) # 启动线程 t.start() # 线程继续执行 print("线程执行完毕!") ``` 在此示例中,线程不会被阻塞,因为线程是在另外一个线程中执行的。线程会继续执行直到 `print("线程执行完毕!")`。同时,线程也在执行自己的任务,直到 `print("线程执行完毕!")`。 ### 回答2: Python 2.6中的线程会阻塞线程的原因是因为在该版本的Python中,线程在进行I/O操作时会自动加锁,防止其他线程进行并发的I/O操作。这种机制被称为“全局解释器锁(Global Interpreter Lock,GIL)”。 GIL的存在是为了保证Python解释器的线程安全性,因为Python的解释器是线程不安全的。GIL的作用是在任意时刻只允许一个线程执行Python字节码,因此其他线程都会被阻塞。这样可以防止多个线程同时修改共享数据导致的数据一致性问题。 在Python 2.6中,I/O操作(如文件读写、网络通信等)会触发GIL的释放,这样其他线程就有机会继续执行。但是,在进行I/O操作时,线程会自动加锁,从而阻塞了线程的执行。线程只能等待线程完成I/O操作后才能继续执行。 为了解决这个问题,可以考虑使用多进程代替多线程。在Python的多进程模块(multiprocessing)中,每个进程都有自己独立的解释器和GIL,因此不存在线程阻塞线程的问题。同时,多进程可以更好地利用多核处理器的能力,提高程序的运行效率。 总结起来,Python 2.6中线程阻塞线程是由于全局解释器锁(GIL)的机制导致的,为了避免这个问题,可以考虑使用Python的多进程模块进行并发编程。 ### 回答3: Python 2.6中,线程线程运行时会被阻塞。这是因为Python 2.6中的多线程模块(thread)采用的是同步的机制,即线程会等待线程结束后才会继续执行。 在Python 2.6中,通过`thread.start_new_thread()`方法可以创建新的线程。当创建线程后,线程会暂停执行,并等待线程结束后再继续执行其余的操作。这会导致线程的阻塞,无法同时执行其他任务。 具体而言,如果在线程中调用了`thread.start_new_thread()`方法创建了一个线程,那么线程会等待该线程完成其任务后再继续执行后续代码。这样的阻塞行为可能导致线程线程运行期间停止响应其他用户操作或任务。 为了解决这个问题,Python后续版本(如Python 3.x)中引入了更加高级的多线程模块(如threading模块),可以更好地管理和控制线程的执行。在较新的Python版本中,我们可以使用`threading.Thread()`类来创建和管理线程,使得线程不会被阻塞,可以并发地执行多个任务。 总的来说,Python 2.6中的线程会阻塞线程的原因是多线程模块采用了同步的机制,需要等待线程完成后才能继续执行。而在后续版本中,我们可以通过更高级的多线程模块来实现并发执行任务,避免线程被阻塞。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值