QQ网名大全

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问题解决,
佚名
2024-06-01 02:22:37
最佳回答
类似问题(10)
  • 佚名
    2024-06-01 18:00:47

    C语言如何终止线程

    终止线程有三种方法:1.线程可以在自身内部调用AfxEndThread()来终止自身的运行2.可以在线程的外部调用BOOL TerminateThread( H...

  • 佚名
    2024-06-01 10:42:26

    Linux C下如何创建一个线程?

    pthread_create(&id,NULL,move,stack);//若stack为字符数组而非字符指针时,传入时不需要强转调用时:void* m...

  • 佚名
    2024-06-01 20:54:46

    一个C语言线程问题

    可以,用struct

  • 佚名
    2024-06-01 00:09:23

    C语言多线程线程同步可以干什么

    线程同步比如你要操作大量数据,再有界面的情况下会卡住,实际上是在运行的,但是你会以为它卡死了,线程同步就是解决这类问题,让操作量大的工作交给一个线程,界面的显示...

  • 佚名
    2024-06-01 04:56:31

    C语言多线程实现

    多线程随机选号程序 以下程序运行后看起来比较有意思,像一个随机选号程序,但不是完全按照问题所说的写的 可供参考,要改很容易//多线程随机选号程序示例#inclu...

  • 佚名
    2024-06-01 02:52:08

    c的多线程实现

    1.pthread(Posix thread)2.Sort of.

  • 佚名
    2024-06-01 21:34:23

    QT C++ 在子线程里使主线程创建一窗口

    我提供两种比较简单的解决方案创建一个Receiver的QObject, 该对象必须生存在你继承的线程中要么给该对象构造对应的信号, 然后与你主线程窗体进行Con...

  • 佚名
    2024-06-01 08:00:00

    怎么用c语言在手机上做编程

    可以使用c4droid软件进行编程。解决这个问题的方法如下:1、首先在手机浏览器中搜索c4droid软件。2、找到安装的压缩包进行下载。3、将下载好的压缩包解压...

  • 佚名
    2024-06-01 08:00:00

    求 c# 创建多线程的作用和方法

    首先不是为了多线程而多线程,多线程会极大的带来额外的出错的几率。C#中第一个打开窗口的线程是主线程,也是处理UI的线程,最好保持这个线程通畅,即不要有阻塞操作,...

  • 佚名
    2024-06-01 08:00:00

    C语言如何实现多线程同时运行

    1、点击菜单栏的“Project”选项卡,下拉列表的最后一项“Project options...”是对当前工程的的属性进行设置的。2、选择弹出对话框中的“Co...