1. 求C语言 多线程多进程 教学视频
其他教程我有,多线程的没有
2. java 多进程并发控制怎么做
在Doug lea的那本着名的《Java并发编程—设计原则与模式》,英文名"Concurrent Programming in Java™: Design Principles and Patterns, Second Edition",书中提到可以用信号量Semaphore实现互斥锁Mutex。虽然java中是通过synchronize关键字提供锁,并用这个基础设施实现信号量的。在有的系统中只有信号量这一原语,锁是通过信号量实现的。代码如下:
import java.util.concurrent.Semaphore;
public class Mutex ...{
private Semaphore s = new Semaphore(1);
public void acquire() throws InterruptedException ...{
s.acquire();
}
public void release()...{
s.release();
}
public boolean attempt(int ms) throws InterruptedException ...{
return s.tryAcquire(ms);
}
}
上面的代码只能在java5中编译通过,因为Semaphore是在java5中才提供的。我在读上面的代码时有疑问。因为如果错误的连续调用release两次,然后两个线程都调用acquire,岂不是这两个线程都可以同时运行,从而违背了互斥锁的定义?为了证明我的猜测,写了如下的代码:
public class TestMutex ...{
public static void main(String[] args) throws InterruptedException...{
Mutex mutex=new Mutex();
mutex.acquire();
mutex.release();
mutex.release();
new MyThread(mutex).start();
new MyThread(mutex).start();
}
}
class MyThread extends Thread...{
private Mutex mutex;
public MyThread(Mutex mutex) ...{
this.mutex=mutex;
}
public void run()...{
try ...{
mutex.acquire();
} catch (InterruptedException e1) ...{
throw new RuntimeException(e1);
}
for(int i=0;i<10;i++)...{
System.out.print(i);
if(i%3==0)...{
try ...{
Thread.sleep(100);
} catch (InterruptedException e) ...{
e.printStackTrace();
}
}
}
mutex.release();
}
}
该程序的输出如下:
00123123456456789789
从而证实了我的猜测。
作为对比,下面是采用synchronized关键字的互斥锁方案:
public class TestLock ...{
public static void main(String[] args) throws InterruptedException...{
new MyThread2().start();
new MyThread2().start();
}
}
class MyThread2 extends Thread...{
public void run()...{
synchronized(TestLock.class)...{
for(int i=0;i<10;i++)...{
System.out.print(i);
if(i%3==0)...{
try ...{
Thread.sleep(100);
} catch (InterruptedException e) ...{
e.printStackTrace();
}
}
}
}
}
}
该程序的输出如下:
01234567890123456789
可见两个线程确实互斥运行。
这个问题产生的原因是虽然在Mutex的定义中"private Semaphore s = new Semaphore(1)",也就是该信号量的初始permits是1,但是在此后每次调用release方法都会导致permits加一。如果能限制permits最大值1,最小值0,那就是真正的Mutex了。
3. 多线程有几种实现方法,都是什么同步有几种实现方法,都是什么
java中多线程的实现方法有两种:1.直接继承thread类;2.实现runnable接口;同步的实现方法有五种:1.同步方法;2.同步代码块;3.使用特殊域变量(volatile)实现线程同步;4.使用重入锁实现线程同步;5.使用局部变量实现线程同步 。
其中多线程实现过程中需注意重写或者覆盖run()方法,而对于同步的实现方法中使用较常使用的是利用synchronized编写同步方法和代码块。
4. 如何使用gdb调试多进程
follow-fork-mode
在2.5.60版Linux内核及以后,GDB对使用fork/vfork创建子进程的程序提供了follow-fork-mode选项来支持多进程调试。
follow-fork-mode的用法为:
set follow-fork-mode [parent|child]
parent: fork之后继续调试父进程,子进程不受影响。
child: fork之后调试子进程,父进程不受影响。
因此如果需要调试子进程,在启动gdb后:
(gdb) set follow-fork-mode child
并在子进程代码设置断点。
此外还有detach-on-fork参数,指示GDB在fork之后是否断开(detach)某个进程的调试,或者都交由GDB控制:
set detach-on-fork [on|off]
on: 断开调试follow-fork-mode指定的进程。
off: gdb将控制父进程和子进程。follow-fork-mode指定的进程将被调试,另一个进程置于暂停(suspended)状态。
注意,最好使用GDB 6.6或以上版本,如果你使用的是GDB6.4,就只有follow-fork-mode模式。
follow-fork-mode/detach-on-fork的使用还是比较简单的,但由于其系统内核/gdb版本限制,我们只能在符合要求的系统上才能使用。而且,由于follow-fork-mode的调试必然是从父进程开始的,对于fork多次,以至于出现孙进程或曾孙进程的系统,调试起来并不方便。
5. java中如何实现多进程并发
创建多个线程就可以了,最长用的方法有:
创建类,实现Runnable 接口,重写run方法;
继承Thread 类,重写run方法。
使用线程池。
具体比较麻烦,你查api
给你一个简单的例子看看。
package DuoXianCheng;
public class ThreadText {
public static void main(String[] args) throws Exception {
Runnable rb=new ThreadText().new Thread2();
Thread t3=new Thread(rb,"旺财");
Thread t1=new Thread(rb,"小强");
t1.start();
t3.start();
}
public class Thread2 implements Runnable{
public void run(){
while(true){
try {
Thread.sleep(2000);
System.out.println("当前线程名称:"+Thread.currentThread().getName()+"*****");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
}
6. 电脑怎样才能同时开启几个视频播放器窗口
一般一个播放软件,无论打开多少个视频文件,都只能一个播放窗口播放。但可以用不同的播放软件同时播放多个视频文件。但能同时运行多少个程序,则视电脑内存大小定,而播放的流畅度,除了看内存容量外,还需要看显卡性能、显存大小与CPU性能。