1 2 3 /* 4 * Copyright (c) 2023 Huawei Device Co., Ltd. 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 #ifndef UTIL_TASK_DELETER_HPP 19 #define UTIL_TASK_DELETER_HPP 20 21 #include <atomic> 22 #include "internal_inc/non_copyable.h" 23 #include "sched/execute_ctx.h" 24 25 namespace ffrt { 26 class TaskDeleter : private NonCopyable { 27 public: 28 TaskDeleter(); ~TaskDeleter()29 virtual ~TaskDeleter() {} 30 virtual void freeMem() = 0; 31 IncDeleteRef()32 inline void IncDeleteRef() 33 { 34 rc.fetch_add(1); 35 } 36 DecDeleteRef()37 inline void DecDeleteRef() 38 { 39 auto v = rc.fetch_sub(1); 40 if (v == 1) { 41 freeMem(); 42 } 43 } 44 uintptr_t reserved; 45 uintptr_t type = 0; 46 WaitEntry fq_we; // used on fifo fast que 47 std::atomic_uint32_t rc = 1; 48 const uint64_t gid; // global unique id in this process 49 }; 50 } // namespace ffrt 51 52 #endif // UTIL_TASK_DELETER_HPP 53