关于线程

一:什么是线程?

    线程:线程最直接的理解就是“轻量级进程”,它是一个基本的CPU执行单元,也是程序执行流的最小单元,由线程ID、程序计数器、寄存器集合和堆栈组成。线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。

     在Linux中,并没有真正的线程。linux中的线程是用进程模拟的,所以说其本质是进程。

二:进程和线程的区别

     1 进程是资源分配的基本单位,线程是调度的基本单位。

       进程的个体间是完全独立的,而线程间是彼此依存的。多进程环境中,任何一个进程的终止,不会响到其他进程。而多        线程环境中,父线程终止,全部子线程被迫终止(没有了资源)。而任何一个子线程终止一般不会影响其他线程,除非子        线程执行了exit()系统调用。任何一个子线程执行exit(),全部线程同时灭亡。

     2 调用函数不一样

          进程的创建: fork()

          线程的调用函数:pthread_create()

     3 资源管理

       进程:进程本身是资源分配的基本单位,因而它的资源都是独立的,如果有多进程间的共享资源,就要用到进程间的通        信方式了,比如共享内存。共享数据就放在共享内存去,大家都可以访问,为保证数据写入的安全,加上信号量一同使        用。

       线程:线程间要使用共享资源不需要用共享内存,直接使用全局变量即可。

     4 通信方式


       进程:A.共享内存    B.消息队列    C.信号量    D.有名管道    E.无名管道    F.信号

          G.文件        H.socket

      线程:线程间的通信方式上述进程间的方式都可沿用,且还有自己独特的几种:

          A.互斥量      B.自旋锁      C.条件变量  D.读写锁      E.线程信号

          G.全局变量

     值得注意的是,线程间通信用的信号不能采用进程间的信号,因为信号是基于进程为单位的,而线程是共属于同一进程空      间的。故而要采用线程信号。

     综上,进程间通信手段有8种。线程间通信手段有13种。


线程的创建:


函数编写:


运行结果:


  

线程等待:


函数编写:


结果显示:


返回结果打印了子线程的tid 和返回值  ,而不是报告子线程消失,说明主线程等待了子线程。


线程终止的三种情况:

1 :正常结束

2: 调用pthread_exit() 结束

3: 被其他线程终止  pthread_cancel()


代码实现:




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 下面是一个关于创建线程的 Python 代码示例: ``` import threading class MyThread(threading.Thread): def __init__(self, thread_id, name, counter): threading.Thread.__init__(self) self.thread_id = thread_id self.name = name self.counter = counter def run(self): print("开始线程:" + self.name) print_time(self.name, self.counter, 5) print("退出线程:" + self.name) def print_time(thread_name, delay, counter): while counter: time.sleep(delay) print("%s: %s" % (thread_name, time.ctime(time.time()))) counter -= 1 thread1 = MyThread(1, "Thread-1", 1) thread2 = MyThread(2, "Thread-2", 2) thread1.start() thread2.start() thread1.join() thread2.join() print("退出主线程") ``` 在这段代码中,我们定义了一个 `MyThread` 类,继承自 Python 中的 `threading.Thread` 类。在这个类中,我们重写了 `run` 方法,来执行线程的任务。接着,我们创建了两个线程对象,并启动它们。最后,使用 `join` 方法等待两个线程执行完毕。 ### 回答2: 在Python中,可以使用`threading`模块来创建和管理线程。下面是一个简单的示例代码,使用Python的类来实现线程: ```python import threading import time class MyThread(threading.Thread): def __init__(self, name): threading.Thread.__init__(self) self.name = name def run(self): print(f"线程 {self.name} 启动") # 执行线程任务 for i in range(5): print(f"线程 {self.name}: 执行任务 {i}") time.sleep(1) print(f"线程 {self.name} 结束") # 创建两个线程对象 thread1 = MyThread("线程1") thread2 = MyThread("线程2") # 启动线程 thread1.start() thread2.start() # 等待线程完成 thread1.join() thread2.join() print("主线程结束") ``` 这个示例代码定义了一个`MyThread`类,继承自`threading.Thread`类,重写了`run`方法,该方法是线程的入口点。在`run`方法中,我们定义了线程要执行的任务。 然后,我们创建了两个`MyThread`对象,分别命名为"线程1"和"线程2"。接着,我们分别启动这两个线程,并使用`join`方法等待线程执行完毕。 最后,主线程打印出 "主线程结束",表示主线程的执行也结束了。 这段代码演示了如何使用Python的类来创建和管理线程。每个线程执行自己的任务,而不会干扰其他线程的执行。使用类可以方便地管理线程,并提供更好的代码组织和可维护性。 ### 回答3: 下面是一个使用Python类编写的关于线程的代码示例: ```python import threading import time # 创建一个继承自Thread类的自定义线程类 class MyThread(threading.Thread): def __init__(self, thread_id, name): threading.Thread.__init__(self) self.thread_id = thread_id self.name = name # 重写run方法,线程启动后执行该方法 def run(self): print("线程 " + self.name + " 正在运行...") time.sleep(2) # 线程休眠2秒 print("线程 " + self.name + " 运行结束.") # 创建线程对象 thread1 = MyThread(1, "Thread 1") thread2 = MyThread(2, "Thread 2") # 启动线程 thread1.start() thread2.start() # 等待线程执行完毕 thread1.join() thread2.join() print("所有线程执行完毕.") ``` 以上代码定义了一个自定义的线程类`MyThread`,该类继承自`Thread`类,并重写了`run`方法,用于线程的实际操作。在`run`方法中,我们模拟了线程运行2秒的操作。然后,创建了两个线程对象`thread1`和`thread2`,并通过调用`start`方法启动它们。最后,调用`join`方法等待线程执行完毕,并输出"所有线程执行完毕"的提示。 这段代码展示了如何使用Python的类编写多线程程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值