Conclusion: Multithreading #include <stdio.h> #include <string.h> #include <stdlib.h> #include <pthread.h> #include <assert.h> void *fun1(void *arg) { printf("fun1 enter\n"); while(1) { printf("%s\n", __FUNCTION__); usleep(1000 * 1000); } printf("fun1 exit\n"); return ((void *)1); } void *fun2(void *arg) { printf("fun1 enter\n"); usleep(1000 * 3000); char * ptr = (char *)malloc(sizeof(char)); printf("ptr1: 0x%x\n", ptr); ptr = NULL; printf("ptr2: 0x%x\n", ptr); free(ptr); memcpy(ptr, "123", 3); printf("ptr3: 0x%x\n", ptr); printf("fun2 exit\n"); return ((void *)2); } int main(void) { pthread_t tid1, tid2; int err; err = pthread_create(&tid1, NULL, fun1, NULL); assert(0 == err); err = pthread_create(&tid2, NULL, fun2, NULL); assert(0 == err); printf("main join ...\n"); // getchar(); pthread_join(tid1, NULL); pthread_join(tid2, NULL); return 0; } Multi-process #include <stdio.h> #include <string.h> #include <stdlib.h> #include <pthread.h> #include <assert.h> void fun(void *arg) { printf("fun1 enter\n"); usleep(1000 * 3000); char * ptr = (char *)malloc(sizeof(char)); printf("ptr1: 0x%x\n", ptr); ptr = NULL; printf("ptr2: 0x%x\n", ptr); free(ptr); memcpy(ptr, "123", 3); printf("ptr3: 0x%x\n", ptr); printf("fun2 exit\n"); return ; } int main(int argc, char *argv[]) { assert(2 == argc); pid_t pid; int i; for(i=0; i<atoi(argv[1]); i++) { pid = fork(); if(0 > pid) { printf("fork error"); exit(1); } else if(0 == pid) { printf("child pid is %lu\n", (unsigned long)getpid()); fun(NULL); exit(0); } } printf("parent pid is %lu\n", (unsigned long)getpid()); while(-1 != wait(NULL)); //Wait for all subprocesses to finish printf("main return\n"); getchar(); return 0; } This is the end of this article about Linux simulation of multi-threaded crashes and multi-process crashes. For more relevant Linux simulation of multi-threaded crashes and multi-process crashes, please search for previous articles on 123WORDPRESS.COM or continue to browse the following related articles. I hope everyone will support 123WORDPRESS.COM in the future! You may also be interested in:
|
<<: The difference between distinct and group by in MySQL
>>: Detailed explanation of the differences between var, let and const in JavaScript es6
The specific method of installing CentOS 7.0 on V...
Table of contents 1. Global Guard 1.1 Global fron...
Vulnerability Details VSFTP is a set of FTP serve...
I have created a goods table here. Let's take...
MySQL escape Escape means the original semantics ...
Today I will take you through the history of ext4...
Let's first look at several ways to submit a ...
CEP - Complex Event Processing. The payment has n...
There are significant differences between centos7...
Socket option function Function: Methods used to ...
The author has been working on a micro-frontend p...
mysql5.6.28 installation and configuration method...
I recently started learning about database knowle...
1. Log4j for log segmentation 1) Prepare three pa...
We may have a question: After we install MySQL lo...