pthread创建线程及遇到问题解决
2011-10-11 11:35
260 查看
出现的错误:invalid conversion from `void*' to `void*(*)(void*)
原来是定义的void reader_function();
pthread_create(&reader,NULL,(void*)&reader_function,NULL);
这样的代码用gcc编译不出问题,用gcc编译有问题。为了两者都没有问题,所以就改为了 void * reader_function();
这样改过之后,又出现了新的问题:[b]invalid conversion from `[b][b]void*(*)()[/b]' to `void*(*)(void*)'[/b][/b]
这时又需要改变reader_function函数,给这个函数加上参数变为:void * reader_function(void*);
执行makefile时出现下面错误
undefined reference to `pthread_create'
要增加 -lpthread
gcc pthreadTest.cpp -o pthreadTest -lpthread
使用互斥锁pthread_mutex_t,实现同一进程中,某些资源的同步。
原来是定义的void reader_function();
pthread_create(&reader,NULL,(void*)&reader_function,NULL);
这样的代码用gcc编译不出问题,用gcc编译有问题。为了两者都没有问题,所以就改为了 void * reader_function();
这样改过之后,又出现了新的问题:[b]invalid conversion from `[b][b]void*(*)()[/b]' to `void*(*)(void*)'[/b][/b]
这时又需要改变reader_function函数,给这个函数加上参数变为:void * reader_function(void*);
执行makefile时出现下面错误
undefined reference to `pthread_create'
要增加 -lpthread
gcc pthreadTest.cpp -o pthreadTest -lpthread
#include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h> void* reader_function(void*args); void writer_function(); pthread_mutex_t mutex; int main(void) { puts("Hello World!!!"); pthread_t reader; pthread_mutex_init(&mutex,NULL); pthread_create(&reader,NULL,reader_function,NULL); // sleep(1); writer_function(); return EXIT_SUCCESS; } void writer_function(){ sleep(1); int i=0; while(1){ printf("this is writer :%d\n",i); i++; } } void* reader_function(void * agrs){ sleep(1); int i=0; while(1){ printf("this is reader reader reader :%d\n",i); i++; } int *a = 0; return a; }
使用互斥锁pthread_mutex_t,实现同一进程中,某些资源的同步。
#include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h> void* reader_function(void*args); void writer_function(); pthread_mutex_t mutex; int tickets = 1000; int main(void) { puts("Hello World!!!"); pthread_t reader; pthread_mutex_init(&mutex,NULL); pthread_create(&reader,NULL,reader_function,NULL); // sleep(1); writer_function(); return EXIT_SUCCESS; } void writer_function(){ while(1){ pthread_mutex_lock(&mutex); if(tickets>0){ printf("this is writer :%d\n",tickets--); }else{ break; } pthread_mutex_unlock(&mutex); } } void* reader_function(void * agrs){ while(1){ pthread_mutex_lock(&mutex); if(tickets>0){ printf("this is reader to sell tickets :%d\n",tickets--); }else{ break; } pthread_mutex_unlock(&mutex); } int *a = 0; return a; }
相关文章推荐
- 创建线程时,undefined reference to 'pthread_create'问题解决
- 2014-10-22遇到的问题----Android创建第一个项目出现appcompat_v7工程的解决办法
- 关于二叉树创建时遇到的问题的解决
- 今天又遇到了问题解决不了,创建层!!!
- 关于创建一个输入端和两个输出端遇到问题的解决
- 线程间操作无效: 从不是创建控件“...”的线程访问它 问题解决
- 线程间操作无效: 从不是创建控件“”的线程访问它~~~的解决方法~ 线程间操作无效: 从不是创建控件“Control Name'”的线程访问它问题的解决方案及原理分析
- 解决Tomcat创建虚拟目录遇到的所有问题。
- 工作线程调用sendmessage()向主对话框发送自定义消息遇到的问题以及解决
- 解决vs2008 sp1 创建工作流遇到“An error was encountered during code generation……”的问题
- Spark程序执行过程中遇到的线程安全问题及解决办法
- 同一线程多次创建 的 线程资源释放问题在每个线程的一开始,用pthred_detach(pthread_self())来使自己detach掉
- 关于Win32 API(VC作为程序设计语言)的创建线程,解决互斥访问临界资源问题
- Linux 下使用POSIX中为线程创建和同步定义的API时遇到的问题
- 线程间操作无效: 从不是创建控件“...”的线程访问它 问题解决
- java 线程遇到的问题及解决方法 JNI调用
- 解决“从不是创建控件的线程访问它”问题。
- 多线程委托之跨线程问题分析--在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke(解决方法已更新)
- 解决Windows 2008无法创建线程问题
- 后台线程与UI线程问题:解决“线程间操作无效: 从不是创建控件xxx的线程访问它”