c语言创建线程的时候实质上做了什么?
#include
#include
#include
#include
#include
#define MAX 10
pthread_t thread[2];
pthread_mutex_t mut;
int number=0, i;
void *thread1(void*)
{
printf ("thread1 : I'm thread 1\n");
for (i = 0; i < MAX; i++)
{
printf("thread1 : number = %d\n",number);
pthread_mutex_lock(&mut);
number++;
pthread_mutex_unlock(&mut);
sleep(2);
}
printf("thread1 :主函数在等我完成任务吗?\n");
pthread_exit(NULL);
}
void *thread2(void*)
{
printf("thread2 : I'm thread 2\n");
for (i = 0; i < MAX; i++)
{
printf("thread2 : number = %d\n",number);
pthread_mutex_lock(&mut);
number++;
pthread_mutex_unlock(&mut);
sleep(3);
}
printf("thread2 :主函数在等我完成任务吗?\n");
pthread_exit(NULL);
}
void thread_create(void)
{
int temp;
memset(&thread, 0, sizeof(thread)); //comment1
if((temp = pthread_create(&thread[0], NULL, thread1, NULL)) != 0) //comment2
printf("线程1创建失败!\n");
else
printf("线程1被创建\n");
if((temp = pthread_create(&thread[1], NULL, thread2, NULL)) != 0) //comment3
printf("线程2创建失败");
else
printf("线程2被创建\n");
}
void thread_wait(void)
{
if(thread[0] !=0) { //comment4
pthread_join(thread[0],NULL);
printf("线程1已经结束\n");
}
if(thread[1] !=0) { //comment5
pthread_join(thread[1],NULL);
printf("线程2已经结束\n");
}
}
int main()
{
pthread_mutex_init(&mut,NULL);
printf("我是主函数哦,我正在创建线程,呵呵\n");
thread_create();
printf("我是主函数哦,我正在等待线程完成任务阿,呵呵\n");
thread_wait();
return 0;
}
以上编译注意以下问题,在正常编译下会出现:
undefined reference to 'pthread_create'
undefined reference to 'pthread_join'
错误,
解决方式1:在用命令行编译的时候,在后面加上 gcc.......-l pthread;
解决方式2:在eclipse 下,点击project->c/c++ build-->settings-->gcc linker -->Libraries-->添加pthread
重新build project
在说一个eclipse cdt 下eclipse新手的问题,经常出现binary file not find ....
修改文件,,点击保存,,project-->build project问题解决,
#include
#include
#include
#include
#define MAX 10
pthread_t thread[2];
pthread_mutex_t mut;
int number=0, i;
void *thread1(void*)
{
printf ("thread1 : I'm thread 1\n");
for (i = 0; i < MAX; i++)
{
printf("thread1 : number = %d\n",number);
pthread_mutex_lock(&mut);
number++;
pthread_mutex_unlock(&mut);
sleep(2);
}
printf("thread1 :主函数在等我完成任务吗?\n");
pthread_exit(NULL);
}
void *thread2(void*)
{
printf("thread2 : I'm thread 2\n");
for (i = 0; i < MAX; i++)
{
printf("thread2 : number = %d\n",number);
pthread_mutex_lock(&mut);
number++;
pthread_mutex_unlock(&mut);
sleep(3);
}
printf("thread2 :主函数在等我完成任务吗?\n");
pthread_exit(NULL);
}
void thread_create(void)
{
int temp;
memset(&thread, 0, sizeof(thread)); //comment1
if((temp = pthread_create(&thread[0], NULL, thread1, NULL)) != 0) //comment2
printf("线程1创建失败!\n");
else
printf("线程1被创建\n");
if((temp = pthread_create(&thread[1], NULL, thread2, NULL)) != 0) //comment3
printf("线程2创建失败");
else
printf("线程2被创建\n");
}
void thread_wait(void)
{
if(thread[0] !=0) { //comment4
pthread_join(thread[0],NULL);
printf("线程1已经结束\n");
}
if(thread[1] !=0) { //comment5
pthread_join(thread[1],NULL);
printf("线程2已经结束\n");
}
}
int main()
{
pthread_mutex_init(&mut,NULL);
printf("我是主函数哦,我正在创建线程,呵呵\n");
thread_create();
printf("我是主函数哦,我正在等待线程完成任务阿,呵呵\n");
thread_wait();
return 0;
}
以上编译注意以下问题,在正常编译下会出现:
undefined reference to 'pthread_create'
undefined reference to 'pthread_join'
错误,
解决方式1:在用命令行编译的时候,在后面加上 gcc.......-l pthread;
解决方式2:在eclipse 下,点击project->c/c++ build-->settings-->gcc linker -->Libraries-->添加pthread
重新build project
在说一个eclipse cdt 下eclipse新手的问题,经常出现binary file not find ....
修改文件,,点击保存,,project-->build project问题解决,
佚名
2024-11-15 11:45:07
类似问题(10)
-
佚名2024-11-15 17:45:01
问C语言如何终止线程
答终止线程有三种方法:1.线程可以在自身内部调用AfxEndThread()来终止自身的运行2.可以在线程的外部调用BOOL TerminateThread( H...
-
佚名2024-11-15 23:27:35
问Linux C下如何创建一个线程?
答pthread_create(&id,NULL,move,stack);//若stack为字符数组而非字符指针时,传入时不需要强转调用时:void* m...
-
佚名2024-11-15 02:40:25
问一个C语言线程问题
答可以,用struct
-
佚名2024-11-15 00:26:03
问C语言多线程线程同步可以干什么
答线程同步比如你要操作大量数据,再有界面的情况下会卡住,实际上是在运行的,但是你会以为它卡死了,线程同步就是解决这类问题,让操作量大的工作交给一个线程,界面的显示...
-
佚名2024-11-15 22:33:38
问C语言多线程实现
答多线程随机选号程序 以下程序运行后看起来比较有意思,像一个随机选号程序,但不是完全按照问题所说的写的 可供参考,要改很容易//多线程随机选号程序示例#inclu...
-
佚名2024-11-15 20:43:04
问c的多线程实现
答1.pthread(Posix thread)2.Sort of.
-
佚名2024-11-15 00:45:45
问QT C++ 在子线程里使主线程创建一窗口
答我提供两种比较简单的解决方案创建一个Receiver的QObject, 该对象必须生存在你继承的线程中要么给该对象构造对应的信号, 然后与你主线程窗体进行Con...
-
佚名2024-11-15 08:00:00
问怎么用c语言在手机上做编程
答可以使用c4droid软件进行编程。解决这个问题的方法如下:1、首先在手机浏览器中搜索c4droid软件。2、找到安装的压缩包进行下载。3、将下载好的压缩包解压...
-
佚名2024-11-15 08:00:00
问求 c# 创建多线程的作用和方法
答首先不是为了多线程而多线程,多线程会极大的带来额外的出错的几率。C#中第一个打开窗口的线程是主线程,也是处理UI的线程,最好保持这个线程通畅,即不要有阻塞操作,...
-
佚名2024-11-15 08:00:00
问C语言如何实现多线程同时运行
答1、点击菜单栏的“Project”选项卡,下拉列表的最后一项“Project options...”是对当前工程的的属性进行设置的。2、选择弹出对话框中的“Co...
风水
起名
网名
- 1 地下城情侣网名霸气
- 2 qq网名关于曼陀罗
- 3 古诗文网名句
- 4 冷漠伤感四字网名男生
- 5 网名尼罗河
- 6 两字网名难
- 7 带血字昵称超拽冷酷
- 8 qq注册英语昵称
- 9 qq昵称初中女生优雅
- 10 肯豆昵称
说说
- 1 Qq带吴字的个性签名
- 2 你真的是小丑个性签名
- 3 搞笑的签名8个字的
- 4 唯美个性说说短句
- 5 一段很长的伤感说说
- 6 关于背书难说说
- 7 遇到无赖纠缠的说说
- 8 辞职的公务员说说
- 9 酷拽的骂人说说
- 10 追男生用的说说