zoukankan      html  css  js  c++  java
  • QNX 线程 调度策略 优先级 时钟频率 同步

    /*
    * barrier1.c
    */

    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <time.h>
    #include <pthread.h>
    #include <sys/neutrino.h>
    #include <timer.h>

    pthread_barrier_t barrier; // barrier synchronization object

    void *thread1 (void *not_used)
    {

    int policy;
    struct sched_param param;
    pthread_getschedparam(pthread_self(),&policy,&param);
    if(policy == SCHED_OTHER)
    printf("SCHED_OTHER 1 ");
    if(policy == SCHED_RR);
    printf("SCHED_RR 1 ");
    if(policy==SCHED_FIFO)
    printf("SCHED_FIFO 1 ");
    if(policy==SCHED_SPORADIC)
    printf("SCHED_SPARODIC 1 ");

    setprio(0, 11); //设置线程优先级 越大优先级越高 0 代表当前进程
    printf("thread1 priority is %d ",getprio(0));

    time_t now;

    time (&now);
    printf ("thread1 starting at %s", ctime (&now));

    // do the computation
    // let's just do a sleep here...
    while(1)
    {
    delay (100);
    pthread_barrier_wait (&barrier);
    // after this point, all three threads have completed.
    time (&now);
    printf ("barrier in thread1() done at %s", ctime (&now));
    }
    }

    void *thread2 (void *not_used)
    {
    //查看线程的调度策略 默认为轮询
    int policy;
    struct sched_param param;
    pthread_getschedparam(pthread_self(),&policy,&param);
    if(policy == SCHED_OTHER)
    printf("SCHED_OTHER 2 ");
    if(policy == SCHED_RR);
    printf("SCHED_RR 2 ");
    if(policy==SCHED_FIFO)
    printf("SCHED_FIFO 2 ");
    if(policy==SCHED_SPORADIC)
    printf("SCHED_SPARODIC 1 ");

    setprio(0, 10); //设置线程优先级 越大优先级越高 0 代表当前进程
    printf("thread2 priority is %d ",getprio(0));

    time_t now;

    time (&now);
    printf ("thread2 starting at %s", ctime (&now));

    // do the computation
    // let's just do a sleep here...
    while(1)
    {
    delay (200);
    pthread_barrier_wait (&barrier);
    // after this point, all three threads have completed.
    time (&now);
    printf ("barrier in thread2() done at %s", ctime (&now));
    }
    }

    int main () // ignore arguments
    {

    pthread_t threadID1,threadID2;

    setprio(0, 12); //设置线程优先级 越大优先级越高 0 代表当前进程
    printf("Main priority is %d ",getprio(0));
    //CPU 时钟频率
    struct _clockperiod timep;
    timep.nsec = 10*1000;
    timep.fract = 0;
    int ErrCode = 0;
    ErrCode = ClockPeriod(CLOCK_REALTIME, &timep, NULL, 0);
    if(ErrCode!=0)
    {
    printf( "Error: %s ", strerror(ErrCode));
    }
    /****************************************/
    int ret = -1;
    int timer_interrupt_id = -1;
    ret = InitializeTimerInterrupt(0, 300, &timer_interrupt_id); //设置时钟中断,10ms
    /*****************************************/
    time_t now;

    // create a barrier object with a count of 3
    pthread_barrier_init (&barrier, NULL, 3);

    // start up two threads, thread1 and thread2
    pthread_create (&threadID1, 0, thread1, 0);
    pthread_create (&threadID2, NULL, thread2, NULL);
    // at this point, thread1 and thread2 are running

    // now wait for completion
    time (&now);
    printf ("main() waiting for barrier at %s", ctime (&now));
    while(1)
    {
    InterruptWait(0, NULL);
    pthread_barrier_wait (&barrier);
    // after this point, all three threads have completed.
    time (&now);
    printf ("barrier in main() done at %s", ctime (&now));
    }
    pthread_exit( NULL );
    return (EXIT_SUCCESS);
    }

    一分耕耘,一分收获!
  • 相关阅读:
    LeetCode——Generate Parentheses
    LeetCode——Best Time to Buy and Sell Stock IV
    LeetCode——Best Time to Buy and Sell Stock III
    LeetCode——Best Time to Buy and Sell Stock
    LeetCode——Find Minimum in Rotated Sorted Array
    Mahout实现基于用户的协同过滤算法
    使用Java对文件进行解压缩
    LeetCode——Convert Sorted Array to Binary Search Tree
    LeetCode——Missing Number
    LeetCode——Integer to Roman
  • 原文地址:https://www.cnblogs.com/splovecyk/p/4502388.html
Copyright © 2011-2022 走看看