Try it, it's completely different from Java.
Note that Java and C + + have an entirely different effect on a thread-throwing exception in multiple threads.
Java inside, for the main thread and other threads are completely unaffected;
In C + +, the entire program exits and all threads are affected.
Java's multi-threading relationship with exceptions can be seen here: http://www.cnblogs.com/charlesblc/p/6175617.html
C + + experiment with the following code:
#include <stdio.h>#include<stdlib.h>#include<unistd.h>#include<pthread.h>using namespace std; #define Num_threads5void* PROCA (void*) {printf ("In proca\n"); Sleep (5); printf ("Proca:try throw...\n"); Throw3;}void* PROCB (void*) {printf ("In procb\n"); //printf ("Proca:try throw...\n"); //throw 4;}intMain () {pthread_t tids[num_threads]; printf ("In Main thread.\n"); intret = Pthread_create (&tids[0], NULL, PROCA, NULL); printf ("Proca started.\n"); RET= Pthread_create (&tids[1], NULL, PROCB, NULL); printf ("Procb started.\n"); Sleep (10); printf ("Start joining A\n"); Pthread_join (tids[0], NULL); printf ("Start joining B\n"); Pthread_join (tids[1], NULL); return0;}
Compile command:
Try try. Cpp-lpthread
Run:
$./Try' int 'aborted (core dumped)
Debug Core Dump:
$ gdb-c core.13689./TryGNU gdb Red Hat Linux (6.3.0.0-1. 96rh) Copyright2004Free software Foundation, inc.gdb are free software, covered by the GNU general public License, and your arewelcome to Change it and/or distribute copies of it under certain conditions. Type"Show copying"To see the conditions. There is absolutely no warranty forGdb. Type "Show Warranty" fordetails. This GDB is configured as"X86_64-redhat-linux-gnu" ... Using host libthread_db Library "/lib64/tls/libthread_db.so.1". Reading symbols from Gkfx object read from Target Memory...done. Loaded system supplied DSO at0x7fff9d3ff000Core is generated by './Try‘. Program terminated with Signal 6, aborted.reading symbols from/lib64/tls/libpthread.so.0... done . Loaded symbols for/lib64/tls/libpthread.so.0Reading symbols from/usr/lib64/libstdc++.so.6... done . Loaded symbols for/usr/lib64/libstdc++.so.6Reading symbols from/lib64/tls/libm.so.6... done . Loaded symbols for/lib64/tls/libm.so.6Reading symbols from/lib64/libgcc_s.so.1... done . Loaded symbols for/lib64/libgcc_s.so.1Reading symbols from/lib64/tls/libc.so.6... done . Loaded symbols for/lib64/tls/libc.so.6Reading symbols from/lib64/ld-linux-x86-64.so.2... done . Loaded symbols for/lib64/ld-linux-x86-64.so.2#0 0x0000003f0b02e2ed in Raise () from/lib64/tls/libc.so.6(GDB) bt#0 0x0000003f0b02e2ed in Raise () from/lib64/tls/libc.so.6#1 0x0000003f0b02fa3e in abort () from/lib64/tls/libc.so.6#2 0x0000003f0bfb1138 in __gnu_cxx::__verbose_terminate_handler () from/usr/lib64/libstdc++.so.6#3 0x0000003f0bfaf166 in __cxa_call_unexpected () from/usr/lib64/libstdc++.so.6#4 0x0000003f0bfaf193 in Std::terminate () from/usr/lib64/libstdc++.so.6#5 0x0000003f0bfaf293 in __cxa_throw () from/usr/lib64/libstdc++.so.6#6 0x00000000004007ee in Proca () at Try.cpp:15#7 0x0000003f0b90610a in Start_thread () from/lib64/tls/libpthread.so.0#8 0x0000003f0b0c5ee3 in Clone () from/lib64/tls/libc.so.6#9 0x0000000000000000 in??() (GDB)
Where the red is the place where the exception is thrown.
One throw exception in multiple threads of C + +