cs241 teaching thread
typedef的另类用法typedef int (*pFunc)(int, int)
typedef是宏定义,一般用法是typedef unsigned long ulong;但是上面的另类用法表示声明了一个指针变量pFunc, 指向int (*)(int, int)。
sample
#include "stdio.h"
int add(int a, int b) { return (a + b); }
int* fun(int* a, int* b) { *a = *a + *b;return a; }
typedef int (*fun_a)(int, int);
typedef int* (*fun_f)(int*, int*);
int main()
{
int a = 2, b = 3,c = 4,d = 5;
fun_a ADD;
fun_f FUN;
ADD = add;//注意此处赋值!!!
FUN = fun;
printf("%d %d", ADD(a, b), *(FUN(&c, &d)));
return 0;
}
strtol函数
C 库函数 *long int strtol(const char *str, char *endptr, int base) 把参数 str 所指向的字符串根据给定的 base 转换为一个长整数(类型为 long int 型),base 必须介于 2 和 36(包含)之间,或者是特殊值 0。
- str – 要转换为长整数的字符串。
- endptr – 对类型为 char* 的对象的引用,其值由函数设置为 str 中数值后的下一个字符。
- base – 基数,必须介于 2 和 36(包含)之间,或者是特殊值 0。base=10表示10进制
C 库函数 void *memcpy(void *str1, const void *str2, size_t n) 从存储区 str2 复制 n 个字节到存储区 str1。
pthread_t
在Linux系统中,多线程的管理使用 pthread_t。线程进程基本操作
功能 进程 线程
创建 fork() pthread_create()
退出 exit pthread_exit()
等待 wait/waitpid() pthread_join()
取消 abort() pthread_cancel()
获取ID getpid() pthread_self()
调度策略 SCHED_OTHER、SCHED_FIFO、SCHED_RR SCHED_OTHER、SCHED_FIFO、SCHED_RR
通信机制 管道、消息队列、共享内存、信号、信号量 信号、信号量、互斥锁、读写锁、条件变量
int pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *arg)
第一个参数为指向线程标识符的指针,也就是线程对象的指针 第二个参数用来设置线程属性 第三个参数是线程运行函数的地址, 最后一个参数是线程要运行函数的参数。
pthread_join()函数回收相关内存区域。
int pthread_detach(pthread_t thread,void **result);
pthread_join使一个线程等待另一个线程结束。代码中如果没有pthread_join 主线程会很快结束从而使整个进程结束,从而使创建的线程没有机会开始执行就结束了。加入pthread_join后,主线程会一直等待直到等待的线程结束自己才结束,使创建的线程有机会执行。pthread_join()函数以阻塞的方式等待thread指定的线程结束。当函数返回时,被等待线程的资源被收回。如果线程已经结束,那么该函数会立即返回。并且thread指定的线程必须是joinable的。
result是一个void的指针的指针,用来接收线程函数运行结果的返回