#include <sched.h>
#include <cstring>
#include <pthread.h>
#include <stdio.h>

#define EXE_TIME 9999999900
#define NUM_THREADS 2

int arr[32];

void *sum_a(void*)
{
    int cpu_num = 0;
    cpu_set_t mask;
    cpu_set_t get;
    CPU_ZERO(&mask);
    CPU_SET(cpu_num, &mask);
    if (sched_setaffinity(0, sizeof(mask), &mask) == -1) {
        perror("warning: could not set CPU affinity\n");
    }
    CPU_ZERO(&get);
     if (sched_getaffinity(0, sizeof(get), &get) == -1) {
        perror("warning: could not get CPU affinity\n");
    }

    if (CPU_ISSET(cpu_num, &get)) {
        printf("sum_a is running in %d cpu_id: %d\n", get, cpu_num);
    }

    int s = 0;
    for (int i = 0; i < EXE_TIME; i++) {
        s = arr[0];
        arr[0] += 1;
    }
}

void *inc_b(void*)
{
    int cpu_num = 1;
    cpu_set_t mask;
    cpu_set_t get;
    CPU_ZERO(&mask);
    CPU_SET(cpu_num, &mask);
    if (sched_setaffinity(0, sizeof(mask), &mask) == -1) {
        perror("warning: could not set CPU affinity\n");
    }
    CPU_ZERO(&get);
     if (sched_getaffinity(0, sizeof(get), &get) == -1) {
        perror("warning: could not get CPU affinity\n");
    }

    if (CPU_ISSET(cpu_num, &get)) {
        printf("inc_b is running in %d cpu_id: %d\n", get, cpu_num);
    }

    int s = 0;
    for (int i = 0; i < EXE_TIME; i++) {
        s = arr[1];
        arr[1] += 1;
    }
}

int main()
{
    int ret;
    pthread_t tids[NUM_THREADS];
    ret = pthread_create(&tids[0], NULL, sum_a, NULL);
    if (ret != 0) {
        printf("pthread_create error: error code %d\n", ret);
        return -1;
    }

    ret = pthread_create(&tids[1], NULL, inc_b, NULL);
    if (ret != 0) {
        printf("pthread_create error: error code %d\n", ret);
        return -1;
    }

    pthread_join(tids[0], NULL);
    pthread_join(tids[1], NULL);
    return 0;
}